线性筛选求素数

来源:互联网 发布:画平面图软件 编辑:程序博客网 时间:2024/06/08 12:13

几种方法求素数的

1 目前是我见过的较快的速度求素数了
#include<stdio.h>#include<stdlib.h>#include<time.h>char whe[1000001];int main(){    clock_t t1,t2;    int t,count=0;    t1=clock();    for(int i=2; i<=1000; i++)        if(whe[i]==0)            for(int j=2; (t=j*i)<=1000000; j++)            {                whe[t]=1;                //count--;            }    t2=clock();    // printf("%d\n",count);    printf("%ld\n",t2-t1);    for(int k=2; k<=1000000; k++)        if(whe[k]==0)            count++;    printf("%d\n",count);    return 0;}


2#include<time.h>#include<stdio.h>#include<iostream>#include<algorithm>#include<bits/stdc++.h>const int maxn=1000000+1;using namespace std;bool flag[maxn];int primes[maxn],prime_num=0;int main(){    int count=0;    clock_t t1,t2;    memset(flag,true,sizeof(flag));    t1=clock();    for(int i=2; i<maxn; i++)    {        if(flag[i]) primes[prime_num++]=i;        for(int j=0; j<prime_num&&primes[j]*i<maxn; j++)        {            flag[primes[j]*i]=false;            if(i%primes[j]==0) break;        }    }    t2=clock();    printf("%ld\n",t2-t1);    for(int i=2;i<maxn;i++)     if(flag[i]) count++;    printf("%d\n",count);}

3#include<time.h>#include<stdio.h>#include<iostream>#include<algorithm>#include<bits/stdc++.h>const int maxn=1000000+1;using namespace std;int a[maxn];int main(){    int count=0;    clock_t t1,t2;    t1=clock();    for(int i=2; i<=1000; i++)    {        if(!a[i])        {            for(int j=2*i; j<maxn; j+=i)            {                a[j]=1;            }        }    }    t2=clock();    printf("%ld\n",t2-t1);    for(int i=2;i<maxn;i++)        if(!a[i]) count++;    printf("%d\n",count);}



0 0
原创粉丝点击