2014-10-20 49 views
-1

此應用程序的第n個主要會收到一些n。接收到該號碼後,該程序具有顯示質數列表中的第n素。例如,如果用戶輸入3,程序應該顯示5,因爲5是第三素起始在2。我知道我的代碼出了問題,但我不知道問題出在哪裏以及我如何解決問題。如何找到用C

#include <stdio.h> 

int main() { 
    int n, i, flag, prime; 
    int counter = 1; 
    scanf("%d", &n); 
    if (n == 1) prime = 2; 
    else 
     do{ 
      prime = 3; 
      for (i = 2; i < prime; i++) { 
       flag = 1; 
       if (prime % i == 0) { 
        flag = 0; 
       } 
      } 
      if (flag == 1) 
       counter++; 
      prime++; 
     } while (counter != n); 
    if (counter == n) 
    printf("%d\n", prime); 
    return 0; 
} 
+2

你必須說明爲什麼你認爲這個代碼是錯誤的。具體而言,請解釋它打印的輸出內容,您期望的內容以及您爲什麼會這樣想。只是做這樣的練習很可能會給你一個答案。 – 2014-10-20 02:45:57

+0

什麼是錯誤? – chouaib 2014-10-20 02:46:06

+2

不知道如果你關心,但用篩子算法(埃拉托色尼或阿特金斯)將大大加快您的功能更大的數字。 – 2014-10-20 02:48:54

回答

0

你這樣的政策的遺體修復樣本:

#include<stdio.h> 

int main(void){ 
    int n, i, flag, prime; 
    int counter = 1; 

    scanf("%d", &n); 
    if (n == 1) 
     prime = 2; 
    else { 
     prime = 1; 
     do{ 
      prime += 2; 
      flag = 1; 
      for (i = 3; i < prime; i+=2){ 
       if (prime % i == 0) { 
        flag = 0; 
        break; 
       } 
      } 
      if(flag == 1) 
       counter++; 
     } while (counter != n); 
    } 
    printf("%d\n", prime); 

    return 0; 
} 
+0

非常感謝!你分享的算法要好得多! – Alex 2014-10-20 11:43:29

0

您通過循環每次重置標誌爲1,所以「標誌」只會告訴你,如果主要是「黃金1」,這當然它永遠是整除。