微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我最大的素数c ++代码这么慢才能得出最终答案?

如何解决为什么我最大的素数c ++代码这么慢才能得出最终答案?

我正在解决一个项目Euler问题,该问题需要找到一个数的最大素数,因此我使用c ++来解决它 但是,当我使用代码获取大量最大的素数(11位,最准确)时,问题需要3分钟以上才能得到最终答案 是什么让我的代码这么慢?

代码

#include <iostream>
using namespace std;
#include <cmath>



 main()
{
long long n,i,maxf=1;

 for (n=1; n<600851475143  ; n++)
 {
      bool test=true;

    if (600851475143  % n ==0)
    {
     for (i=2; i<=n/2; i++)
     {
         if (n%i == 0)
         {
             test =false;
             break;
         }
     }
     if ((test ==true) && (n > maxf))
       {maxf=n;
      cout<<n<<endl;
     }

    }

 }
 cout<<"maximum prime factor is "<<maxf<<endl;
}

解决方法

您可以通过使用Eratosthenes方法的筛子来解决此问题,并提高时间复杂度。这将减少总体时间复杂度。 您可以参考以下链接:

https://cp-algorithms.com/algebra/sieve-of-eratosthenes.html

,

您可以对代码执行一件事,这将大大提高其速度。为了显着提高其速度,请在第二个for循环中更改i<=n/2以取n的平方根,看起来像i<=sqrt(n)。如果要检查每个数字,这将使要测试的数字减少约99.9997%。

,

最简单的方法就是改变

for (n=1; n<600851475143  ; n++)

for (n=2; n<sqrt(600851475143); n++)

及以后

 int m = sqrt(n);
 for (i=2; i<=m; ++i)

那么结果将以毫秒为单位。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。