簡體   English   中英

沒有找到素數程序的響應

[英]No response of a find prime number program

我被困在編程任務中該任務使用布爾數組查找2到N之間的素數。方法是將所有素數“ index”設置為true,將其他設置為false,所以最后只是打印出真實的索引這是我的代碼

#include <iostream>
#include <ctime>
using namespace std;

int main(){
    int n,i;
    int count = 0;
    cout << "Enter the value of n: ";
    cin >> n;
    bool* prime = new bool[n];
    for (i=0;i<=n;i++)
        prime[i] = true;
    for (i=2;i<=n;i++)
        if (prime[i])
            for (int j=n;j=i;j--)
                if (j%i == 0)
                    prime[j] = false;
    cout << "Prime numbers: ";
    for (i=2;i<=n;i++)
        if(prime[i])
            {cout << i <<", ";
             count++;}
    cout << count <<" primes found.";


    //hold the windows
    system("pause");
    return 0;
}

問題是我輸入N的值后,程序沒有響應,也沒有顯示任何東西。

只是瀏覽一下代碼,我可以看到您在此行上使用了錯誤的運算符:

for (int j=n;j=i;j--)

其中j=i應該是j==i j=i使用賦值運算符( = )而不是比較運算符( == ),並且如果i不為零,它將始終為true,從而創建一個無限循環-表示無輸出等


邊注

您可能需要研究n邊界檢查。 如果用戶輸入一個負數怎么辦? bool* prime = new bool[n]; 會嘗試生成一個負數大小的數組,這是不可能的(除非將數字轉換為無符號值,在這種情況下,您將有大量的布爾值)

查看數組的初始化時,我看到一個錯誤:

bool* prime = new bool[n];

素數中的元素將從0到n-1。 然后,將值設置為true的循環。 在某個時候,我== n:

for (i=0;i<=n;i++)
    prime[i] = true;

當i == n時,您已在數組中寫得太遠。 這可能會覆蓋寄信人地址。

程序員經常嘗試創建所需大小的數組。 除非需要大量存儲,否則我喜歡創建有點太大的陣列。 這減少了緩沖區溢出錯誤導致我的代碼被利用的機會。

bool* prime = new bool[n + 20];

您會驚訝地發現這種做法可以節省您很多時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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