2013-10-14 78 views
0

此外觀在C中的代碼如何?我曾嘗試在javascript上做,但不知道如何循環它。 一個程序,用於確定用戶輸入的號碼是否爲主數字 。程序將繼續詢問數字,直到用戶輸入小於2的值爲 。此程序必須使用模塊實施。 例如:確定用戶輸入的數字是否爲質數的程序

Enter a number: 4 
4 is not a prime number 
Enter a number: 5 
5 is a prime number 
Enter a number: 0 

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; 
} 
+0

@RahulTripathi該部分可能意味着用戶輸入'5',程序輸出'5不是質數'。編輯:看看帖子來源顯示的是這種情況。 – millimoose

+0

@RahulTripathi這是'4'(<< =用戶輸入了這個)後面跟着'4不是素數'(<< ==電腦打印了這個) – dasblinkenlight

+0

格式化了這個問題! –

回答

1

這不是一般的優化算法:

int n; 
do 
{ 
    printf("Enter the number: "); 
    scanf("%d",&n); 

    if (n >= 2) // check if number is prime, general algorithm 
    { 
     bool prime = true; 
     for (int j=2; j<n; j++) 
      if ((n%j) == 0) // n is divided by j without modulus - is it not prime 
      { 
       prime = false; 
       break; 
      } 

     if (prime) 
      printf("prime\n"); 
     else 
      printf("is not prime\n"); 
    } 
} while (n >= 2); 

,並在這裏被更新的版本,它使用的事實,所有的偶數是不是素數,且有沒有意義檢查更大的數字N/2

int n; 
do 
{ 
    printf("Enter the number: "); 
    scanf("%d",&n); 

    if (n >= 2) // check if number is prime, general algorithm 
    { 
     bool prime = true; // for n=2 prime is true 
     if (n > 2) 
      prime = n & 1; // number at least odd 

     if (prime) 
     { 
      // starts with 3 
      for (int j=3; j<=(n>>1); j+=2) 
       if ((n%j) == 0) // n is divided by j without modulus - is it not prime 
       { 
        prime = false; 
        break; 
       } 
     } 

     if (prime) 
      printf("prime\n"); 
     else 
      printf("is not prime\n"); 
    } 
} while (n >= 2); 
+0

與@ronenkr一致 - 你可以安全地用sqrt(n)替換(n >> 1) –

0

實際上只需檢查sqrt(n)就可以讓你的代碼運行得更快。

您可以查看this發佈其他有用的方法。

相關問題