2013-07-31 61 views
0

我需要計算的前100張素數,但在輸出我得到了我的號碼「9」等.......................我想計算第100張素數如何在這種情況下使循環?

{ 
bool prime; int start, new, kor,k, i,gg; 
start=1; 
k=1 ; 
gg=0; 
do 
{ 

    if (start < 2) {new = 2;} 
    if (start == 2) {new = 3;} 
    if (start > 2) { 
     if ((new % 2) == 0) 
     new--; 
     do { 
      prime = true; 
      kor=sqrt(new); 
      new+=2; 
      for (i=3;prime&& (i<=kor); i+=2) { 
          if (new % i == 0) 
           prime=false;} 
     } while (!prime) ;  
    } 
    gg++; 
    printf("%d->%d\n",gg, new); 
    k++; 
    start++; 
    continue; 
} 
    while (k<101); 

} 
+0

你應該提到你的編程語言,所以我們並不需要猜測。這也增加了stackoverflow內的可見性。 – mnagel

+0

我認爲這是C,因爲它使用了一個名爲'new'的變量? – doctorlove

+0

C沒有布爾類型 – jh314

回答

0

隨着

if (start < 2) {new = 2;} 
if (start == 2) {new = 3;} 

你有特殊的情況下,第一和第二個數字。 輪do...while循環中,我們跳過for循環,因爲kor是1,從而打印5.這是我們沒有檢查接下來的時間,所以也許我們只是很幸運。聞起來像我們沒有足夠的檢查。

下一次,之後

kor=sqrt(new1); new1+=2; 

kor是2,所以我們再次沒有爲循環做,並打印7.下一次,我們有同樣的情況。 KOR依然是200,所以你得到9

認爲如果的kor=sqrt(1);將工作之前切換到new+=2。 一旦你在這個部分,你不需要檢查是否偶數,因爲你總是添加2到奇數。 順便說一句爲什麼說continue是循環中的最後一件事? 這可能是更好的(我把它放在一個函數的自由):

void find_primes() 
{ 
    bool prime; int start, new, kor,k, i,gg; 
    start=1; k=1 ;gg=0; 
    do 
    { 
     if (start < 2) {new = 2;} 
     if (start == 2) {new = 3;} 
     if (start > 2) { 
      do { 
       prime = true; 
       new+=2; 
       kor=sqrt(new); 
       for (i=3;prime&& (i<=kor); i+=2) { 
        if (new % i == 0) 
         prime=false; 
       } 
      } 
      while (!prime) ; 
     } 
     gg++; printf("%d->%d\n",gg, new); 
     k++; 
     start++; 
    } 
    while (k<101); 
} 
0

我不知道你在編程用什麼語言,所以我走在這一個猜測(我不能評論還) -

你在答案中得到所有奇數作爲輸出? 9,11,13,15 ... 看來你是打印出「新」的所有值,無論是否主要是真還是假。也許你應該把

if (prime) { 
    printf("%d->%d\n",gg, new); 
} 

+0

修復,它ç,,,,,,, – user2570509

+0

我想計算的前100個素數 – user2570509

+0

需要,同時,它的循環 – user2570509

0
here is an example program from: 
    http://www.programmingsimplified.com/c/source-code/c-program-for-prime-number 

note: 1 is not a prime number, see: 
    http://primes.utm.edu/notes/faq/one.html 




#include<stdio.h> 

int main() 
{ 
    int n, i = 3, count, c; 

    printf("Enter the number of prime numbers required\n"); 
    scanf("%d",&n); 

    if (n >= 1) 
    { 
     printf("First %d prime numbers are :\n",n); 
     printf("2\n"); 
    } 

    for (count = 2 ; count <= n ; ) 
    { 
     for (c = 2 ; c <= (i - 1) ; c++) 
     { 
      if (i%c == 0) break; 
     } 

     if (c == i) 
     { 
      printf("%d\n",i); 
      count++; 
     } 
     i++; 
    } 

    return 0; 
}