您的位置:首页 > 其它

筛选生成素数

2014-04-08 21:20 253 查看
/*
筛选生成素数
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<time.h>
using namespace std;
const int N=10000000;
//--------------------------------------
//最为简便的筛法—埃拉托斯特尼筛选法
int prime1[N+10]={0},flag1[N+10]={0};
int sum1=0;
void selectPrime1()
{
int i,j;
for(i=2;i<=N;i++)
{
if(flag1[i]==0)
{
for(j=2;j*i<=N;j++)
{
flag1[j*i]=1;
}
}
}
for(i=2;i<=N;i++)
{
if(flag1[i]==0)
{
prime1[sum1++]=i;
}
}
}
//-----------------------------------------
//优化算法—欧拉筛法—时间复杂度可优化至O(n)
int prime2[N+10],flag2[N+10]={0};
int sum2=0;
void selectPrime2()
{
int i,j;
for(i=2;i<=N;i++)
{
if(flag2[i]==0) prime2[sum2++]=i;
for(j=0;j<sum2;j++)
{
if(i*prime2[j]>N) break;
flag2[i*prime2[j]]=1;
if(i%prime2[j]==0) break;
}
}
}
//----------------------------------------
int main()
{
selectPrime1();
long time=clock();
selectPrime2();
for(int i=0;i<100;i++){
cout<<prime1[i]<<" "<<prime2[i]<<endl;
}
cout<<" Time : "<<time<<" "<<clock()-time<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: