用vector与bitset分别创建1亿以内的素数表,比较快慢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用vector与bitset分别创建1亿以内的素数表,比较快慢相关的知识,希望对你有一定的参考价值。

vector容器:

代码如下:

 

#include<iostream>
#include<vector>
#include<ctime>
using namespace std;


int main()
{
int num=0;
clock_t t=clock();
vector<int> p(100000001,1);   //设置大小为1亿,初始值为1
for(int i=2;i<=10000;i++)
if(p[i])
for(int j=i*i;j<p.size();j+=i)   //p.size()为容器大小
p[j]=0;
for(int i=2;i<=100000000;i++)
if(p[i])
num++;
cout<<num<<endl;
cout<<(clock()-t)/CLK_TCK<<endl;  //用时为8秒
return 0;
}

 

bitset容器

代码如下:

#include<iostream>
#include<bitset>
#include<ctime>
using namespace std;


int main()
{
int num=0;
clock_t t=clock();
bitset<100000001>*p= new bitset<100000001>;   //大小为1亿
p->set();                                                              //设置每一位都为1
for(int i=2;i<=10000;i++)
if(p->test(i))                                                         //p->test(j)取第i位的元素值
for(int j=i*i;j<p->size();j+=i)
p->reset(j);                                                         //把第j位变为0
for(int i=2;i<=100000000;i++)
if(p->test(i))
num++;
cout<<num<<endl;
cout<<(clock()-t)/CLK_TCK<<endl;                      //用时22秒
delete[] p;
return 0;
}

 

以上是关于用vector与bitset分别创建1亿以内的素数表,比较快慢的主要内容,如果未能解决你的问题,请参考以下文章

java例题_02 101~200以内的素数

用C++求50~100内的素数,具体问题如下

求100以内的所有质数(素数) 要求:用VB的for语句写

用C++编写程序求100以内的所有素数(质素)的和。

用c语言求1000以内的素数(素数是只能被1和它本身整除的数)

C语言求范围之内素数的和与个数?