您的位置:首页 > 编程语言 > C语言/C++

C++计算大量素数经典方法

2011-05-18 19:29 344 查看
今天做搜索的acm题,有一步需要用到计算100000以内的素数,并保存在一个数组内。直接算超时,讲义中用其他约束条件将范围变为了10000才打到了时间的要求。在网上搜C++素数计算,发现了一段经典代码。实验了一下,速度非凡,在我这1G内存的老式笔记本上求出1亿以内的素数并保存到制定数组中只用了8.531s。计算10万以内的只需1ms。代码贴在下面

int count=0;
bool *temp=new bool[data];
for(int i=0;i!=data;++i)
temp[i]=true;//用来判断是否是素数的数组
temp[2]=true;
for(int i=2;i!=data/2;++i)
{
if(temp[i])
{
int j=2;
while(i*j<data)//素数的倍数都不是素数
{
temp[i*j]=false;
++j;
}
}
}
for(int i=2;i!=data;++i)
{
if(temp[i])
++count;
}
int *prime=new int[count];//动态分配数组用来保存所有的素数
count=0;
for(int i=2;i!=data;++i)
{
if(temp[i]) prime[count++]=i;
}

delete[] temp;//这两行放在最后释放内存
delete[] prime;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: