【问题标题】:Generating very large prime numbers C++ [closed]生成非常大的素数 C++ [关闭]
【发布时间】:2018-10-01 16:32:57
【问题描述】:

这是我写的简单代码(我知道我可以优化它,但我在做一些测试并发现了一个问题):

#include <iostream>
using namespace std;
int main() {
    int n;
    int d=3;
    cout<<"insert a number n: ";
    cin>>n;
    while (d<n){
        if ((n%d)!=0) {
            d=d+2;
        }
        else
        n=n+1;
    }
    cout<<"the number: "<<n<<" is prime"<<endl;
    system ("PAUSE");
    return 0;
}

基本上,它似乎适用于“足够小”的数字(即小于 '2147483647' 的数字),这是输出中发生的情况的屏幕截图: enter image description here

我需要生成一个大约一千位数的素数(或者更多,但我们在 500-1000 范围内) c++可以处理吗? (我也需要程序像我的代码一样为我循环)关于如何解决这个问题的任何建议?

【问题讨论】:

  • 你将需要一个像 GMP 这样的 Big Int 库
  • 这样大的数字不能保存在int 变量中。您可能想了解限制here
  • 你有没有做过关于生成大素数的研究?通过快速的谷歌搜索,您可能想在我们的姊妹网站上阅读密码学here
  • 一个常见的技巧是使用模运算来完全避免巨大数字的问题。看看你的分配规范是否允许这个或类似的替代方案。
  • 看看:sanfoundry.com/… 您当前的方法(即使使用 1000 位数字)需要数年才能给出答案。也许您可以调整链接测试以使用大量数字。

标签: c++ loops primes


【解决方案1】:

您应该使用 'long' 或 'long long' 也可以使用 'unsigned' 来获得更大的范围,因为 int 也使用负数,您不需要获取素数。

【讨论】:

  • Asker 想要大约一千位数。 long long 在我所知道的任何计算机上都不够长。
猜你喜欢
  • 2010-11-11
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多