[英]Prime number calculator C++
我一直在嘗試編寫一個程序,以打印出最多為N的素數。
運行該程序時,提示我輸入預期的N值,但是當我按回車鍵時,程序結束。 我認為問題可能出在break語句中:
if (modulo == 0) break;
盡管讀到“中斷”只會結束嵌套循環,而不會同時結束兩者,但我認為這是唯一可能出錯的事情。 當我將其替換為“ continue”時,程序會打印出從N到0的所有整數,因此如果我輸入N = 20,則輸出為20、19、18,... 3、2
代碼的相關部分如下,對於C ++新手的任何幫助/建議將不勝感激。
int N, f;
float modulo;
cout << "Welcome to the prime number sieve\n";
cout << "Enter the number up to which the prime numbers will be printed: ";
cin >> N;
for (int j = N; j != 1; j--) {
f = j;
for (f; f != 0; f--) {
modulo = j%f;
if (f == 1) {
cout << j << ", ";
}
if (modulo == 0) break;
}
}
return 0;
您的算法是錯誤的。 無論數字是多少,第二個循環中的中斷都會立即發生。
假設輸入為20
。 然后
第一次迭代:
j = 20
f = j = 20
modulo = 20 % 20 = 0
break
第二次迭代:
j = 19
f = j = 19
modulo = 19 % 19 = 0
break
依此類推...您應該做的第一件事是查找Sieve of Eratosthenes
對於您的程序,如何進行處理( 說明 ):
for (int j=2; j < N; j++) {
for (int f = 2; f*f <= j; f++) {
if (j % f == 0) {
break;
}
else if (f+1 > sqrt(j)) {
cout << j << " ";
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.