Problem:輸入n (1<=n<=1,000,000) 判斷n是否為質數. 如果x為一非質數之正整數,必有小於等於根號x之質因數. 建立給定範圍開根號以內之質數表(一百萬根號即一千),接著判斷n是否能整除這些質數,如不可則為質數.
#include<stdio.h>
#include<math.h>
int main()
{
int n,j,i,s=2,f[168],x;
f[0]=2;f[1]=3;
for(i=5;i<=1000;i++)
{
x=sqrt(i);
for(j=2;j<=x;j++)
{
if(i%j==0)break;
}
if(j>x){f[s]=i;s++;}
}
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
if(n==1){printf("1\n");continue;}
if(n==2||n==3){printf("0\n");continue;}
else
{
i=0;
x=sqrt(n);
while(f[i]<=x)
{
if(n%f[i]==0){printf("1\n");break;}
i++;
}
if(f[i]>x)printf("0\n");
}
}
return 0;
}
沒有留言:
張貼留言