几种方法求素数的
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);
}