RE大军已启动,公主王子速救援

P3383 【模板】线性筛素数

显然数组开小了啊
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


|