2016-02-12 42 views
-1

該功能應該採取的三個參數,並找到素數小於NUM使用試除法灌裝與整數的數組,然後使用試除法發現素數小於N

void trialDivision(int prime[], const int NUM, const int SIZE) { 
int j = NUM; 
for (int i = 0; i < NUM; i++) { 
    prime[i] = 1; 
} 

for (int i = 2; i <= sqrt(NUM); i++, j++) { 
    put numbers less than n into array 
} 

然後做試驗inputed分部找到素數。

我有一個問題,弄清楚如何把小於sqrt(NUM)的數字放入函數中。

感謝

+0

您是否試圖實施Eratosthenes篩?谷歌它,你會發現很多例子。或從維基百科開始。 – Barmar

回答

0

首先,你將要創建一個循環,從去到i=2i<NUM。這是爲了檢查每個大於1的正整數,直到NUM-1爲止。它看起來像這樣:

for (int i=2;i<NUM;i++) 
{ 
    // prime checking 
} 

現在進行實際的主要檢查。讓我們把它放在一個函數中。在這裏你可以使用sqrt()來定義循環的上限。我們再次以j=2開始我們的循環,因爲所有數字都可以被1整除,所以沒有必要包含它。

bool isPrime(int i) 
{ 
    for (int j=2;j<sqrt(i);j++) 
    { 
     if (i%j==0) 
     { 
       return false; 
     } 
    } 
    return true; 
} 

基本上,如果循環結束,那麼我們還沒有發現任何i因素2sqrt(i)之間,所以它是一個素數。

現在只需在您的第一個循環中調用此函數。

for (int i=2;i<NUM;i++) 
{ 
    if (isPrime(i)) 
    { 
     prime[i] = 1; // or whatever you want to use to represent a prime. If you use 1, it's best if you initiate the array with 0's 
    } 
} 

如果你想只是一個素數的列表,然後std::vector<int>將用於存儲你的結果是更好的選擇。