2014-10-31 48 views
0

這個程序應該打印第一個x素數,但我注意到它打印了一些非素數,例如27或35. 我一直在看它幾個小時,沒有什麼似乎彈出。所以請,如果你知道什麼是錯的,告訴我。素數編程C

#include <stdio.h> 
int main(){ 
    int i=0, cont=2, prim=2, quant; 
    printf("Insert number of prime numbers you wish: "); 
    scanf("%d", &quant); 
    printf("The first %d prime numbers are:\n", quant); 
    while(i<quant){ 
     if(prim%cont!=0 && (cont>1 && cont<prim)){ 
      cont++; 
     } 
     else if(prim%cont==0 && (cont>1 && cont<prim)){ 
      prim++; 
     } 
     else if(prim%cont==0 && cont==prim){ 
      printf("%d\n", prim); 
      prim++; 
      cont=2; 
      i++; 
     } 
    } 
    return 0; 
} 

回答

0

代碼:

int count = 0, quant = 5, i, j; 

int flag = 0; 
for(prim = 2 ; count <= quant ; prim ++) { 
    flag = 0; 
    for(j = 2; j < prim/2; j++) { 
     if(prim % j == 0) { 
      flag = 1; 
      break; 
     } 
    } 
    if(flag == 0) { 
     printf("%d\n", prim); 
     count++; 
    } 
} 

更新你的代碼爲:

while(i<quant){ 
    if(cont<prim) { 
     if(prim%cont!=0) { 
      cont++; 
     } else { 
      prim++; 
      cont = 2; // restart cont 
     } 
    } 
    else if(prim%cont==0 && cont==prim){ 
     printf("%d\n", prim); 
     prim++; 
     cont=2; 
     i++; 
    } 
} 
+0

不真的明白這是如何工作的,對不起XP的,但你有沒有想到我爲什麼會返回錯誤的值? – 2014-10-31 03:58:12

+0

謝謝,工作得很好,而且這真的很荒謬......這就是當你編碼半睡着時會發生什麼XP – 2014-10-31 04:48:39

-1

簡單的方法就是找到的是:如果數量不整除2,3 & 5,它是一個素數。

#include <stdio.h> 

int main() 
{ 

    int num = 35; 
    int i = 5; 
    printf("1 2 3 5"); 
    while (i <= num) 
    { 
     if ((i % 2) && (i % 3) && (i % 5)) 
     { 
       printf(" %d",i); 

     } 
     i++; 
    } 
    printf("\n"); 
    return 0; 
} 
+1

77不能被2,3或5整除...但是7 x 11,因此不是Prime 。 Prime的定義比這個稍微多一點。 – abelenky 2015-08-28 21:16:44

+0

@abelenky:你好 – PKDOJ 2015-08-28 21:20:04