C++高效计算素数的方法

在网上看到很多计算素数的c++例子,本人试了一下觉得效率不高,于是自己写了个算,效率还算可以,如图!
C++高效计算素数的方法_第1张图片

  • 我们要计算素数,首先要明确素数定义及性质:

分析题目理清思路

  1. 又称质数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数
  2. 除2以外所有的偶数都不是素数;
  3. 判断一个数n是否为素数需判断它能否被2~(n-1)的数整除(余为0)
  4. 若n为大于或等于2的正整数,在n到 之间至少有一个质数
    ……
    以上所列或多或少都有作用,我们只一些核心的内容:“除2以外所有的偶数都不是素数” “判断它能否被2~(n-1)的数整除(余为0)”

    确定并改进for循环
    就此,我们大致可以使用for循环+if语句进行枚举判断,
    for(n=0;n<=1000000;n++)
    又根据第2条,我们可以节省很多时间不用去穷举,所以将for中的增量改为2,将初始值改为1(其实就是穷举除1的奇数进行判断)
    for(n=1;n<=1000000;n+=2) //n+=2是n=n+2缩写

    减少if判断次数及内容
    这里要用到一个数学性质,能减少程序的运算枚举量

    if(n%i==0)
    break;
    else if(n%i!0)
    输出语句:输出n
    改后
    if(n%i==0)
    break;
    if (i>sqrt(n))
    {
    输出语句
    }

优化
c++自带有计时函数,我们可以使用它来计时程序运行完需要的时间
clock()函数使用示例:

代码区块

纯原创手打,请珍惜他人智力成果!

#include
#include  //for clock()
#include //可无
using namespace std;
int main()
{
    long time; //clock的结果是个长整型变量
clock_t start,finish;
start=clock();        //计时开始 
    double a=0.3,b=1.2;
    for(int x;x<=2000;x++)  //循环2000次
    {
    a=a*b;
    cout<1000); //调用windows.h库暂停
finish=clock();   //计时结束
time=(finish-start)/1000;     //转化为秒
    cout<<"运行程序共用 "<"秒\n";  
return 0;
} 
最后放上**计算素数**的代码,也许还有改进方法,欢迎讨论
#include
#include
#include
//作者:猪猪 CSDN:jackjob404 TIEBA:@V超级猪猪 
using namespace std;
int main()
{
system("title 计算素数");
system("cls");
//以上两句可省略 
    long time;
int i,t=2;
long long n;
clock_t start,finish;
start=clock();
cout << "10E素数有:\n[第1组]2" << endl;
for (n=3;n<=1000000000;n+=2)
{
for(i=2;i<=sqrt(n);i++)
if(n%i==0)
  break;
if (i>sqrt(n))
{
    t++;
cout <<"[第"<"组]"<100000;
cout <<"10E内素数共有"<"对\n共花费"<"秒"<return 0;
}

你可能感兴趣的:(初学者)