#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
void Grial(int _N)
{
int count=0;
vector<int> ar;
ar.push_back(2);
int _A=0;//统计循环次数。
int _K;
int _I;
for(_I=3;_I<=_N;_I+=2)
{
for(_K=3;_K<_I;_K++)
{
_A++;
if(_I%_K==0)
break;
}
if(_K>=_I)
ar.push_back(_I);
}
cout<<"素数个数:"<<ar.size()<<endl;
for(int _J=0;_J<ar.size();_J++)
{
cout<<ar[_J]<<" ";
}
cout<<"循环次数:"<<_A<<endl;
}
int main()
{
Grial(100000);
return 0;
}
循环次数:455089152
time ./a.out
real 0m2.948s
user 0m2.804s
sys 0m0.000s
--------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
void Grial(int _N)
{
vector<int> ar;//由于无法动态的知道_N范围内到底有多少素数,所以我选择使用vector。
ar.push_back(2);
int _A=0;//统计比较次数
int _K;
for(int _I=3;_I<=_N;_I+=2)//去除偶数
{
_K=3;
do
{
_A++;
if(_I%_K==0)
break;
_K+=2;//去除偶数因子.
} while(_K*_K<_I );//成对的因数,其中一个个必然小于等于——N的开平方.
if(_K*_K>_I)
ar.push_back(_I);
}
cout<<"素数个数:"<<ar.size()<<endl;
for(int _J=0;_J<ar.size();_J++)
{
cout<<ar[_J]<<" ";
}
cout<<"循环次数:"<<_A<<endl;
}
int main()
{
Grial(100000);
return 0;
}
循环次数:1345382
time ./a.out
real 0m0.150s
user 0m0.024s
sys 0m0.000s
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
void Grial(int _N)
{
vector<int> ar;//由于无法动态的知道_N范围内到底有多少素数,所以我选择使用vector。
ar.push_back(2);
int _A=0;//统计比较次数
int _K;
for(int _I=3;_I<=_N;_I+=2)//除去偶数
{
_K=3;
int i=0;
do
{
_A++;
if(ar[i]*ar[i]>_I)
break;
if(_I%ar[i++]==0)
break;
}while(i<ar.size());
if(i>=ar.size() || _I%ar[i-1]!=0)
ar.push_back(_I);
}
cout<<"素数个数:"<<ar.size()<<endl;
for(int _J=0;_J<ar.size();_J++)
{
cout<<ar[_J]<<" ";
}
cout<<"循环次数:"<<_A<<endl;
}
int main()
{
Grial(100000);
return 0;
}
循环次数:704028
real 0m0.129s
user 0m0.024s
sys 0m0.004s
感想:传说还有一种求解素数的至尊解法,过亿数据只要秒内解决,让我们一起去研究吧。