2040:【例5.7】筛选法找质数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 18027 通过数: 12319
【题目描述】
用筛法求出 n ( 2 ≤ n ≤ 1000 ) n(2≤n≤1000) n(2≤n≤1000)以内的全部质数。
【输入】
输入n。
【输出】
多行,由小到大的质数。
【输入样例】
10
【输出样例】
2
3
5
7
1.筛选法
#include<bits/stdc++.h>
using namespace std;
int main() {
int a,n,i;
cin>>n;
bool f;
for(a=2; a<=n; a++) {
f=1;
if(a==1)f=0;
else for(i=2; i*i<=a; i++)if(a%i==0) {
f=0;
break;
}
if(f)cout<<a<<endl;
}
return 0;
}
2.函数法
#include<bits/stdc++.h>
using namespace std;
bool sushu(int n){
bool r=true;
for(int i=2;i*i<=n;i++){
if(n%i==0){
r=false;
break;
}
}
if(n<=1){
r=false;
}
return r;
}
int main() {
int n,i;
cin>>n;
for(i=2; i<=n; i++) {
if(sushu(i)) {
cout<<i<<endl;
}
}
return 0;
}
3.sqrt法
#include <bits/stdc++.h>
using namespace std;
int main() {
bool a=true;
int n,i,j;
cin>>n;
for(i=2; i<=n; i++) {
a=true;
for(j=2; j<=sqrt(i); j++) {
if(i%j==0) {
a=false;
}
}
if(a) {
cout<<i<<endl;
}
}
return 0;
}