2017-10-20 160 views
-3

我想編程在c中的質數檢查器,但下面的代碼返回一些素數作爲非素數。我一直沒有找到任何註冊爲素數的非素數。我不確定自己出錯的地方,並開始懷疑我的for循環正在跳過數字。For循環跳過數字在C

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int nummer = 47203; 
    printf("Ist %d eine Primzahl?\n", nummer); 
    int dividey =2; 
    if (nummer == 2){ 
     printf("nein"); 

    }  


    for (dividey = 2; dividey <= nummer/2; dividey++){ 
    if (nummer%dividey==0){ 
     printf("nein"); 
     break; 
    }else { 
     printf("ja"); 
     break; 
    } 
    } 
} 
+4

2個問題:當一個數字不分,你的算法停止,跳過其他!並考慮循環直到sqrt(nummer),您將保存週期。在SO和codereview上有許多關於質數檢查的重複/問題。檢查它們。 –

回答

2

是的,它是跳過數字 - 因爲你已經告訴它!

例如,如果您正在檢查15,這顯然不是主要的。在第一次通過你的循環,dividey設置爲2。然後,您做此項檢查:

if (nummer%dividey==0) 

15 % 2是1,所以這個條件不滿足,你跳轉到else部分。

你的其他部分做到這一點:

printf("ja"); 
break; 

即它打印Ja說這是一個素數,並停止循環,即使它不是素數,並且你沒有檢查所有除數。如果循環繼續檢查除以3,它會意識到它不是素數。

+0

那麼解決方法是? –

+0

最簡單的方法是在你的循環之前將一個標誌設置爲'false',並在'Nein'分支中'break'之前將其設置爲true。一旦你退出循環,如果該標誌仍然是'假',你已經找到了一個素數。 – Steve