簡體   English   中英

質數計算器C ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM