爲什麼我的程序找到質數的工作,但退出在20,031的總理,這是225,149?沒有錯誤消息,並且x代碼聲稱程序「以退出代碼結束」,正如它通常那樣。素數計劃停止在20,031'素數,225,149沒有明顯的原因。沒有錯誤信息
我的問題不是關於程序本身,它似乎工作(尋找素數),但什麼限制或計算錯誤,我正在反對這導致它退出。
此循環有意無限,但它按照預期輸出到225,149,然後停止並退出且沒有錯誤。它只是退出,好像它到達了循環的結尾。我已經嘗試對迭代進行限制,並將其一點一點地提高到10,000,000,000,但奇怪地停止了相同的數字,225,149。
是否有超過或其他的計算時間限制?
輸出的最後一位:程序輸出從零開始的素數計數,然後輸出素數。
20027)225109 20028)225119 20029)225133 20030)225143 20031)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();
}
有更有效的算法來生成素數。 (我們知道3之後的所有素數都是6n-1或6n + 1的形式,n = 1,2,3 ...所以我們只需要檢查該形式的除數,只有除數達到平方根)但是如果不改變你使用的算法,你可以通過用'n = n + 2'代替'n ++'來改善它......沒有必要檢查是否有偶數是質數,你只需要檢查奇數。 – spencer7593 2014-09-28 07:00:34