素数表的获取(常规方法与埃氏筛法)

来源:互联网 发布:北仑博菱电器工资算法 编辑:程序博客网 时间:2024/06/09 20:15
//求解100以内的所有素数,复杂度对n不超过10^5的大小是没有问题的#include <cstdio>#include <cmath>int prime[101],num=0;int is_prime(int n){    int m=round(sqrt(n));    if(n<=1) return 0;    for(int i=2;i<=m;i++)        if(n%i==0) return 0;    return 1;}void find_prime(){    for(int i=1;i<=100;i++)        if(is_prime(i)) prime[num++]=i;}int main(){    find_prime();    for(int i=0;i<num;i++) printf("%d ",prime[i]);    printf("\n");    return 0;}

//埃氏筛法求100以内的所有素数#include <cstdio>const int maxn=101;int prime[maxn],num=0;int vis[maxn]={0};void find_prime(){    for(int i=2;i<maxn;i++){        if(!vis[i]){            prime[num++]=i;            for(int j=i*2;j<maxn;j+=i) vis[j]=1;        }    }}int main(){    find_prime();    for(int i=0;i<num;i++) printf("%d ",prime[i]);    printf("\n");    return 0;}
//改进后的埃氏筛法#include <cstdio>#include <cmath>const int maxn=101;int prime[maxn],num=0;bool vis[maxn]={0};void find_prime(){    int m=round(sqrt(maxn-1));    for(int i=2;i<=m;i++){        if(!vis[i]){            for(int j=i*i;j<maxn;j+=i) vis[j]=1;        }    }}int main(){    find_prime();    for(int i=2;i<maxn;i++){        if(!vis[i]) prime[num++]=i;    }    for(int i=0;i<num;i++) printf("%d ",prime[i]);    printf("\n");    return 0;}