#include<stdio.h>
#define MAXSIZE 50000
int main(void)
{
unsigned long m=0,n,i,j,k,t=0;
unsigned long arr[MAXSIZE];
int is_prime=0;
while(scanf("%ld",&n)==1) {
if(n==2 || n==3) printf("質數\n");
else if(n%2==0 || n%3==0) printf("非質數\n");
else {
if(n-m>1)
for(i=t,j=2*i+5;j*j<=n;i++,j+=2)
arr[i]=1;
is_prime=1;
for(i=0,j=5;j*j<=n && is_prime;j+=2,i++) {
if(arr[i]!=-1) {
if(n-m>1)
for(k=i+j;k*k<=n;k+=j)
arr[k]=-1;
if(n%j==0) {
printf("非質數\n");
is_prime=0;
}
}
}
m=n;
t=i;
}
if(is_prime) {
printf("質數\n");
is_prime=0;
}
}
return 0;
}
不知道哪裡有問題,幫忙指教一下!