2015-05-29 47 views
0

我正在閱讀第7章練習7中由Stephen G. Kochan編寫的一本名爲C編程的書,我只介紹了變量,數據類型,算術表達式,程序循環,決策制定和數組處理, 沒有其他的。使用數組計算素數

此問題要求我們顯示使用被稱爲Erastosthenes其下面列出 步驟1中的步驟的篩的算法150枚第一素數:定義整數P.集的所有元素P [I]到陣列0,2 < = i < = n 第2步:將i設置爲2 第3步:如果i> n,算法終止。步驟4:如果P [i]是0,那麼i是素數。 步驟5:對於j的所有正整數值,使得i Ĵ< = N,P [I j]的設定爲1個 步驟6:加1到i和轉到步驟3

我理解算法,但是當我試圖實現它,它只是返回0。

//Sieve of Erastosthenes 

#include <stdio.h> 

int main (void) 

{ 
    int i, j, P[151]; 


    for (i = 2; i <= 150; ++i) 
    P[i] = 0; 

    for (i = 2; i <= 150; ++i){ 

    if (P[i] = 0) 
     printf ("%i ", P[i]); 

    for (j = 1; j*i <= 150; ++j) 
     P[i*j] = 1; 

    } 
    return 0; 

} 

另外,我知道我必須包含頭文件使用布爾在我的計劃,我需要添加任何東西使用double

+2

相關:[「你會需要更大的船」](http://www.ign.com/top/movie-moments/5) - (或在你的情況下,一個更大的陣列)。充其量,你的代碼只能計算150以下的素數,而不是前150個素數,即不存在的錯誤(有)。 – WhozCraig

回答

2

此:

if (P[i] = 0) 

不是測試,這是一個分配(當然結果在由if測試的值,但實際的表達,其是未測試)。

C有=轉讓和==進行平等測試。啓用更多編譯器警告。

0

幾件事情:

演習是列出的素數高達150(不是第150個素數)。

您要爲每個答案得到0,因爲這個代碼

if (P[i] = 0) 
    printf ("%i ", P[i]); 

應改爲閱讀

if (P[i] == 0) 
    printf ("%i ", i); 

要打印我 - 循環索引值 - 數組元素的不是值P [i]中。