问题描述:编写一个程序,读入一组整数,并确定是否每个数是质数。一个数字,n,'如果它唯一因子1和n。对于这个问题,数字1和2不被认为是质数。
输入:每个输入行包含一个整数。整数列表终止与一些< = 0。你可能认为输入最多包含250个数字和数量小于或等于16000。
输出:输出应该为每个数字由一行,每一行首先列出了题,后跟一个冒号和空间,紧随其后的是“是”或“不是”。
样例输入:
1 2 3 4 5 17 0
样例输出:
1: no
2: no
3: yes
4: no
5: yes
6: yes
源代码及运行结果如下所示:
# include <stdio.h>
# include <math.h>
char A[16001]={"\0"};
#define M 16001
int main()
{
int m=0,n=1,i,j,Q=sqrt(M);
for(i=2;i<=Q;i++)//改进的埃氏筛法O(sqrt(N)*log(log(N)))
if(!A[i])for(j=i+i;j<M;j+=i)
A[j]=1;
A[1]=A[2]=1;//将2变为质数
scanf("%d",&n);
while(n>0)
{
printf("%d: %s\n",++m,A[n]?"no":"yes");
scanf("%d",&n);
}
return 0;
}