大大們好:
以下是小弟我的程碼,第一我的程式compile正確且執行無誤,但就是逾時,要如何改才不會逾時
第二為何別人要用sqrt() 這個開根號
懇請大大們說明
#include<stdio.h>
main(){
int x,i;
while(scanf("%d",&x)!=EOF)
{
int ans=0;
for(i=2;i<x;i++)
{
if((x%i)==0)
{
ans++;
break;
}
else continue;
}
if(ans==0) printf("質數\n");
else printf("非質數\n");
}
return 0;
}
大大們好:
以下是小弟我的程碼,第一我的程式compile正確且執行無誤,但就是逾時,要如何改才不會逾時
第二為何別人要用sqrt() 這個開根號
懇請大大們說明
#include
main(){
int x,i;
while(scanf("%d",&x)!=EOF)
{
int ans=0;
for(i=2;i {
if((x%i)==0)
{
ans++;
break;
}
else continue;
}
if(ans==0) printf("質數\n");
else printf("非質數\n");
}
return 0;
}
因為for(i=2;i<x;i++) 太慢了,而x 的最大因數可能是sqrt(x), 或小於sqrt(x)
所以只要寫 for(i=2; i<=sqrt(x) ;i++), 跑迴圈的次數會少很多
要先排除 1, 1不是質數
用sqrt(j)是判斷質數常用的方法之一,有人會用 j/2,但sqrt(j)<=j/2,可以少了一些不必要的迴圈數