一.质数筛法的的应用
题目: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;
}
京公网安备 11010502036488号