2016-09-19 58 views
-4

我有一個質數的程序,但我需要優化它。任何提示?優化與編碼

int num, i, count = 0; 

    printf("Type a non-negative integer:\n"); 

scanf("%d", &num); 

    if((num%2 == 0)&& (num != 2)||(num == 1)){ 

    printf("%d is not a prime number.\n", num); 

    } else if(num == 2){ 

    printf("%d is a prime number.\n", num); 

    } else { 

    for(i = 3; i < num; i += 2){ 

     if(num%i == 0){ 

    count++; 

    break; 

     } 

    } 

    if(count == 0){ 

     printf("%d is a prime number.\n", num); 

    } else { 

     printf("%d is not a prime number.\n", num); 

    } 

    } 

} 
+4

最好在[codereview.se]上提問。堆棧溢出專注於不工作的代碼。 (除了在此處註冊時,我強烈建議閱讀他們的[遊覽](http://codereview.stackexchange.com/tour)。) – usr2564301

+0

它是否再次「重新搜索」?哇,時間過得很快...... – Olaf

+0

這不是一個*程序*。發佈一個完整的示例,並學習使用空格縮進代碼。 – chqrlie

回答

0

我認爲這是您可能自己解決的基本問題之一! 我可以幫你解決這個問題;首先看看素數定義:

素數是一個數字,只能被1和它自己可分。 假設我們將其命名爲然後只能被1整除,且數字1不是總數。

這樣的想法是:

1 - 如果數字是1不是素數!

2 - 如果數目是2是素數

3 - 否則---->我們初始化I = 2,然後開始計算的ñ%I值;如果是0的數量不是素數,否則就要由1

增量I我們這樣做第3步,直到我< ñ(或我< =開方(ñ))

如果號碼不能被任何i整除,那麼它就是黃金!

下面是一個簡單的實現:

int n ; 
printf("enter n:"); 
scanf("%d",&n); 
if(n<=1) printf("is not prime"); 
else if(n==2) printf("is prime"); 
else{ 
    bool flag = true; 
    for(int i = 2 ; i < n ; i++) 
     if(n%i==0){ 
     flag = false; 
     break; 
     } 
    if(flag) printf("is prime"); 
    else printf("is not prime"); 
} 

有一個更好的算法來發現一系列素數;我認爲這是更好地瞭解它:

Sieve of Eratosthenes

我希望本教程可以幫助你找出什麼是素數。

+0

問題標記爲[tag:c]而不是[tag:C++]。您可以毫不費力地將您的答案重寫爲直接的C代碼 - 而且您應該。爲C問題提供C++答案不是一個好主意。 –

+0

@JonathanLeffler哎呀!昨天晚上我累了,我看到它的c + + :))) 我會寫在c,感謝您的編輯和建議(Y) –