素数程序停在20,031的第一个素数,225,149,没有明显的原因。无错误消息
Prime number programs stops at 20,031'st prime, 225,149 for no apparent reason. No error message
为什么我的素数查找程序有效,但在20031的第1个素数225149处退出?没有错误消息,x代码声称程序"以退出代码结束",就像正常情况一样
我的问题不是关于程序本身,它似乎正在工作(寻找素数),而是我遇到了什么限制或计算错误,导致它退出。
这个循环是故意无限的,但它按预期打印到225149,然后停止并毫无错误地退出。它只是退出,就好像它到达了循环的末尾。我试着限制迭代次数,并将其一点一点地提高到100000000000,但奇怪的是,它停止了相同的数字,225149。
是否存在超出的计算时限或其他情况?
输出的最后一位:程序输出从零开始的素数计数,然后是素数。
20027)22510920028)22511920029)22513320030)22514320031)225149程序结束,退出代码为:0
#include <iostream>
#include <cmath>
using namespace std;
//performs modulus and find remainder return remainder r to void primal
double fmodulus (double n, double d)
{
double r;
r= fmod(n, d);
return r;
}
//finds prime number using modulus double type modulus function fmod()
void primal()
{
int count=1;
double n=3.0, d=2.0;
for (int i= 0; i>=0; ++i)
{
double r;
r= fmodulus(n, d);
//if n==d then is prime nymber
if (n==d)
{
cout<<count<<") "<<n<<endl;
n++;
d=2.0;
count++;
}
//if remainder == 0 then not prime number
else if (r==0)
{
n++;
d=2.0;
}
//not prime so updates d of modulus increment by 1
else
{
d++;
}
}
}
int main(int argc, const char * argv[])
{
cout<<endl;
primal();
}
问题是每次进行测试时i
都会增加。在这种情况下,您可以轻松地进行20亿次测试。当i
溢出时,其值变为负值,因此循环结束。
你可以做3件不同的事情来解决这个问题:
-
第一种是将
i
的类型更改为unsigned int
或unsigned long long
。这些类型总是积极的,你的循环永远不会结束。不同之处仅在于unsigned long long
被写入64位而不是32位。 -
第二种方法是更改循环中的条件;如果您希望它是无限的,您可以简单地使用
1
。这是一般的真实情况。 -
最后一种方法是更改程序,在第一个循环中插入第二个循环,以确保在每次迭代中测试不同的数字。
最终int i
将溢出。有符号整数溢出是未定义的行为,因此编译器可以随心所欲。
通常它会溢出到INT_MIN,它是负的,所以循环结束。
尝试将i
设为long
并打印其值以监视它。
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- C++ 乘法定义的构造函数错误消息似乎错误
- 使用 C/C++ 获取错误消息MSB6006错误代码 2
- 为什么可以无错误地编译此片段
- 获得程序输出(无错误),但程序.exe在使用 graphics.h 时不起作用
- 为什么我的无锁消息队列段错误:(?
- 将字符串添加到2D数组并显示COUT消息(没有错误消息?)的错误
- 交流时Chrome本机消息传递错误
- 在 OpenCV 中播放视频:无错误无输出
- 消息框错误
- VC 2010可执行文件未在其他计算机上运行-无错误
- 如何在关联指针时编写无错误的代码
- 消息队列错误的文件描述符错误
- 素数程序停在20,031的第一个素数,225,149,没有明显的原因。无错误消息
- PugiXML空文档无错误
- 用汇编器消息编译错误
- 汇编器消息:错误:拇指条件指令应该在 IT 块中 - "strexeq r1,r2,[r4]"
- 如何找到MPI消息截断错误的来源
- 异常消息:插入错误值的字符串表示