【問題】c語言的質數問題??


Recommended Posts

#include <stdio.h>

#include <math.h>

int fun(int);

int main(void)

{

int x;

while(scanf("%d",&x)==1);

if(fun(x)==1)puts("質數");

else puts("非質數");

return 0;

}

int fun(int n)

{

int i,temp;

if(n==2)

return 1;

if(n%2==0)

return 0;

temp=(int)sqrt((double)n);

for(i=3;i<=temp;i+=2)

if(n%i==0)

return 0;

return 1;

}

放到zerojudge上

出來的結過是WA...如下

與正確輸出不相符(line:1)

您的答案為: 非質數

正確答案為: 質數

到底哪裡出錯????

鏈接文章
分享到其他網站

while 後面沒有{} 反而是 ;

這應該是你程式錯誤的主因,

根本就跑不進去迴圈阿:P

我看不懂你的while條件式。

根據質數定義:

一個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數;即只有兩個正因數(1和自己)的自然數

所以把條件式改為

 while(scanf("%d",&x), x>1){ 

的話,

除了終止條件,

可以順便做到防呆的效果。

以上,

僅供參考。

鏈接文章
分享到其他網站
  • 2 weeks later...
那個while的式子是讓測資可以跑...確認scanf讀入一筆資料

恩恩,沒有錯。

不過

while(scanf("%d",&x)!=EOF&& x>1){ 

的寫法除了可以檢查是否達到檔案結尾外,還可同時檢查資料的正確性。

算是進階的寫法~

鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入