显然数组开小了啊
by zjpwdyf @ 2024-02-28 13:50:49
错误颇多,包括但不限于:
```cpp
bool s[1000000];
```
数组开小了,题目中n=1e8,所以s怎么说都要开到100000010
```cpp
if(s[i=1])
```
将i赋值为1,进入死循环
```cpp
for(int a=2;a<=n;a++){
s[i*a]=0;
}
```
当a和i都取到最大的时候,i=1e4,a=1e8,整体i * a=1e12,铁定越界,并且炸int了,可以改成
```cpp
for(int a=2;a*i<=n;a++){
s[i*a]=0;
}
```
并且开long long
```cpp
for(int a=1;a<=q;a++){
for(int a=1;a<=q;a++){
cin>>k;
if(s[a]==1){
b++;
}
if(b==k){
cout<<a;
}
}
```
双重循环一共$q^2$个问题?根据我猜测你想写的应该改成
```cpp
for(int a=1;a<=q;a++){
cin>>k;
b=0;
for(int i=1;i<=n;i++)
{
if(s[i]==1)
{
b++;
}
if(b==k)
{
cout<<i<<"\n";
break;
}
}
}
```
最后时间复杂度不对经……这是欧拉筛的板子,埃氏筛要是不用bitset卡的话似乎是过不去的,另外输入输出优化也要加上不然似乎也不过(我拿我自己的板子试了一下,#3和#5都T了)
by syp11 @ 2024-02-28 14:19:02
```cpp
if(s[i=1])
```
改为
```cpp
if(s[i]==1)
```
而且这份代码求的是小于等于 $\sqrt n$ 的质数,不是小于等于 $n$ 的质数,查询第 $k$ 小的质数这部分也有很明显的问题,因为 $k$ 不是不降的。
by fydj @ 2024-02-28 14:21:23
@[shiyupeng](/user/957501)
“漏洞百出的我”
by ZiruiLIU @ 2024-02-28 19:30:08
最新情况[这](https://www.luogu.com.cn/discuss/784466)
@[shiyupeng](/user/957501) @[shiyupeng](/user/957501)
by ZiruiLIU @ 2024-02-28 19:53:04