目录
一:前言
最近,写了一些关于求质数的方法,相关链接如下:
1:朴素算法
2:埃氏筛法
3:线性筛法
二:整合代码
#include <bits/stdc++.h>
using namespace std;
const int N=999999;
int cnt,n;
int a[N];
bool b[N];//0 质数 1 非质数
void get_prime_ps(int n){
b[0]=1,b[1]=1;
for(int i=2;i<=n;i++){
if(i==2)b[i]=0;
else
if(i%2==0)b[i]=1;
else{
bool as=1;
for(int j=3;j<=i/j;j+=2)
if(i%j==0){
b[i]=1;
as=0;
break;
}
if(as)
b[i]=0;
}
if(!b[i])a[cnt++]=i;
}
return;
}
void get_prime_as(int n){
b[0]=1,b[1]=1;//先将0和1解决好
for(int i=2;i<=n;i++){
if(!b[i]){//当为质数
a[cnt++]=i;//保存数据
for(int j=i+i;j<=n;j+=i)//划掉倍数
b[j]=1;
}
}
return;
}
void get_prime_xx(int n){
b[0]=1,b[1]=1;//先将0和1解决好
for(int i=2;i<=n;i++){
if(!b[i])a[cnt++]=i;
for(int j=0;a[j]*i<=n;j++){
b[a[j]*i]=1;
if(i%a[j]==0)break;
}
}
return;
}
int main(){
cin>>n;
get_prime_xx(n);//用户自己选择函数名
cout<<cnt<<"\n";
for(int i=0;i<cnt;i++)
cout<<a[i]<<' ';
return 0;
}