2016-02-06 21 views
-3

以下是我寫的代碼來查找是否輸入了否。是否是素數。請告訴要糾正的問題,因爲輸出會變得很奇怪。查找是否輸入no。是否是素數。我得到的輸出是相當不可思議的

` #include<stdio.h> 
    main() 
{ 
    int n,i; 
    printf("enter a no."); 
    scanf("%d", &n); 
    for(i=2;i<=n/2;i++) 
    { 
     if(n%i==0) 
     printf("its prime"); 
     else{ 
       printf("not prime"); 
      } 
    } 
} 

The output is shown in the picture below:

+0

圖像中的輸出與您的代碼產生的內容完全一致。你的問題到底是什麼? (並且您的整個IDE的映像不是必需的,順便說一下,學習捕獲單個窗口的輸出:在移動設備上無法讀取大於必要的圖形,並且對那些在這些設備上支付數據的用戶非常不公平。) –

+0

我只是想讓系統告訴我,如果沒有。輸入是否爲素數。我哪裏做錯了? – chayan

+0

p.s.對於較大的圖像抱歉。 – chayan

回答

2

我相信你不知道如何模工作。根據Wikipedia,模運算找到一個數字除以另一個數字(有時稱爲模數)後的餘數。

當你問if(n%i==0)你問的是n除以i是否給出餘數爲0或沒有。以n=6i=3。然後n%i==0的計算結果爲「真」,因爲6可以被3整除。當算法完全相反時,您的算法嘗試打印該數字爲素數。下面的代碼應該工作:

#include<stdio.h> 
    main() 
{ 
    int n,i; 
    printf("enter a no."); 
    scanf("%d", &n); 
    for(i=2;i<=n/2;i++) 
    { 
     if(n%i==0) 
     { 
      printf("not prime"); 
      return 0; //Since you've already proved it's composite, there's no need to waste time. 
     } 
    } 
    printf("Number is prime."); //If your number is not prime, this line won't execute as your program will exit with that return statement. 
} 
1

如果你關心的回答讓印刷多次,那麼你不應該打印的回答語句中的for循環。或者,使用'break'語句。 此外,使您的素數檢查條件正確。

#include<stdio.h> 

main() { 
    int n, x; 

    printf("Enter a number"); 
    scanf("%d", &n); 

    for (x = 2; x <= n/2; x++) { 
     if (n % x == 0) { 
      printf("Not prime"); 
      break; 
     } 

     else { 
      printf("Prime"); 
      break; 
     } 
    } 
} 
+0

是的。非常感謝 – chayan