题目描述
用筛法求之N内的素数。
输入
N
输出
0~N的素数
样例输入复制
100
样例输出复制
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
题解1:
暴力算法,没啥好说的,简单粗暴。
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int N;
int main(){
cin>>N;
int p;
if(N>1){
for(int i=2;i<=N;i++){
p=1; //记录一下
for(int j=2;j*j<=i;j++){ //设置一下界限,j遍历到i的开方即可
if(i%j==0){
p=0;
break;
}
}
if(p) //如果j正常退出,则说明i是一个素数
cout<<i<<endl;
}
}
return 0;
}
题解2:
原题要求是用用筛法去筛选素数,这种解法也很简单。
比如说求0到100之间的素数
2,3,4,5,6,7.....100
先将2的倍数筛去
2,3,5,7...99
然后筛去3的倍数
2,3,5,7,...97
....依次类推,每次都晒去质数的倍数。
最后剩下的数即为素数。
#include<bits/stdc++.h>
using namespace std;
int N;
int main(){
cin>>N;
int sum[N+1],i;
for(int m=0;m<N+1;m++)
sum[m]=0;
if(N>1){
for( i=2;i*i<=N;i++){
if(sum[i]==0){
for(int z=2;z*i<=N+1;z++){
sum[i*z]=1;
}
}
}
for(i=2;i<=N;i++){
if(sum[i]==0){
cout<<i<<endl;
}
}
}
}