2013-09-29 35 views
0

我的任務是從用戶那裏接受無盡的輸入(ctrl-d終止),並在輸入的數字是素數時返回一個響應。對此的扭曲是,我不得不使用所有數字的%函數< =數字輸入的平方根,我必須製作一個涵蓋數字輸入的素數列表(如果數字輸入是6,列表必須包含2,3,5和7),線性搜索列表,如果輸入數字在列表中,則返回true。它也必須在一個班級。作業幫助:素數標識符C++

這是我的Isprime函數。

bool isprime::Isprime(int N){ 
    int i,primenum,max=1; 
    int prime[max]; 
    prime[0]=2; 
    for(primenum=3;prime[max-1]<N;primenum++){ 
    for(i=2;i<primenum;i++){ 
     if(primenum%i!=0){ 
     max++; 
     prime[max-1]=primenum; 
     } 
    } 
    for(int j=0;j<max;j++){ 
    if(N==prime[j]) 
     return true; 
    } 
    return false; 
} 

當我運行該程序,返回所需要的輸出爲2(一個我最初投入列表中唯一的號碼。我在做什麼錯在這裏?感謝先進的輸入。

編輯1:當用戶輸入數字時,如果使用isPrime函數返回true,一個簡單的cout < <ñ< <「是一個素數」是輸出這就是我的意思是由理想的輸出

編輯2。 :編輯我的功能後,由於一些粗心的錯誤,所有輸入整數ar e返回true。

+1

你能澄清你的預期產出是什麼? – nhgrif

+0

當用戶輸入數字時,如果Isprime函數返回true,則輸出一個簡單的cout << N <<「是素數」。 –

+0

例如,當用戶輸入「4」並點擊輸入時,不輸出任何內容。但是當他們鍵入「3」並點擊輸入時,它會顯示「3是一個素數」。 –

回答

1

至少有兩個錯誤在你原來的代碼:

在你的代碼,max=2並沒有改變。第一個for環路測試prime[1] < N未初始化。然後prime[1]已被許多次由一些非素數分配。

例如,在第一循環中,我和primenum是

i = 2, primenum = 3, prime[1] = 3 
i = 3, primenum = 4, prime[1] = 4 
i = 4, primenum = 5, prime[1] = 5 
... 

現在這個新的代碼有錯誤太

INT I,primenum,最大= 1; int prime [max];

您定義了一個只有one元素的int數組素數。然後,您嘗試訪問它,因爲它有更多。這是錯誤的。

而下面是不是你想要的

for(int j=0;j<max;j++){ 
    if(N==prime[j]) 
     return true; 
} 

,因爲正如我上面所說的,黃金[I]爲i>0沒有的Valide。

+0

Oh boy。這很尷尬。 –

+0

我編輯了這個函數,現在所有的數字都返回true。我現在做錯了什麼? –

+0

在意識到更多錯誤後,我做了更多的編輯,但是我仍然遇到同樣的問題 - 每個輸入現在都返回true。 –