一.质数筛法的的应用
题目:patb1013
https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112
代码如下:
#include <cstdio> #include <iostream> using namespace std; //易错点1: const int maxn =1000001; //不能刚刚好取10^4,因为第10000个素数不知道多大,尽量开大点才对 //然后在超过第n个时候就立马break,这样不会浪费时间使复杂度仍然不会变! int prime[maxn],num=0; bool p[maxn]={0}; void findprime(int n){ for(int i=2;i<maxn;i++){ if(p[i]==false) { prime[num++]=i; if(num>=n){ //易错点 2 :合理优化 break; //只需要n个素数,因此超过时即可结束 } for(int j=i+i;j<maxn;j+=i){ p[j]=true; } } } } int main() { int m,n,count=0; cin>>m>>n; findprime(n); for(int i=m;i<=n;i++){ //输出第m个素数至第n个素数 cout<<prime[i-1]; //易错点 3:下标从0开始!! count++; if(count%10!=0&&i<n){ //易错点 4 :格式问题 //因为空格肉眼看不出来,可以先用其他字符输出看效果,比如# cout<<" "; }else { cout<<endl; } } return 0; }