【发布时间】: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 位数字)需要数年才能给出答案。也许您可以调整链接测试以使用大量数字。