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