筛法求素数
#include<iostream>
#include<stdio.h>
using namespace std;
#define MAX_NUM 10000000
char isPrime[MAX_NUM+10];//最终如果isPrime[i] = 1,则表示i是素数,大数组要定义在main函数外面
//筛法求素(质)数
int main(){
for(int i = 0;i <= MAX_NUM;i++){
isPrime[i] = 1; //开始假设所有数都是素数
}
for(int i = 2;i <= MAX_NUM;i++){ //每次将一个素数的所有倍数标记为非素数
if(isPrime[i]){ //只标记素数的倍数 isPrime[i]<=>isPrime[i] == 1
for(int j = 2 * i;j <= MAX_NUM;j += i){ //从二倍开始标记素数的倍数为非素数
isPrime[j] = 0;
}
}
}
for(int i = 2;i <= MAX_NUM;i++){
if(isPrime[i]){
cout << i <<",";
}
}
}
其他方法求素数
输入正整数n(n>=2),求不大于n的全部质数
#include<iostream>
#include<stdio.h>
using namespace std;
//输入正整数n(n>=2),求不大于n的全部质数
int main(){
int n;
cin >> n;
cout << 2 <<",";
//除2以外的所有偶数都不是质数,可以排除
for(int i = 3;i <= n;i += 2){
//判断i是否有除1意外的因子
int k;
for( k = 3;k < i;k += 2){
if(i%k == 0){
break;
}
//k自增到根号k后就没必要再增了
if(k*k > i){
break;
}
}
//输出从第二个if语句跳出循环时的i的值
if(k*k > i){
cout << i <<",";
}
}
}