//代码如下:
#include<stdio.h>
main()
{
int n,p,i,m;
while(n<1000)
{
i=2;
p=1;
n=n+1;
m=n/2;
while(i<=m)
{
p=p*(n%i);
i=i+1;
}
if (p!=0)
{
printf("%d是一个质数\n",n);
}
}
return 0;
}
结果如下:
请问为什么打印到181就终止了?
因为p多次相乘会因为数值太大,会超出int整数范围的。所以应该用if判断n%i==0就不是素数,可以直接跳出循环。
改成这样,代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
#include<stdio.h>
main()
{
int n=0,p,i,m;
while(n<1000)
{
i=2;
p=1;
n=n+1;
m=n/2;
while(i<=m)
{
if(n%i==0){
p=0;
break;
}
i=i+1;
}
if (p!=0)
{
printf("%d是一个质数\n",n);
}
}
return 0;
}