|
你的N-S图中写到“直到i>sqrt(n)或w!=0”,也就是说当i<=sqrt(n)且w=0时要执行循环体
因此[mw_shl_code=c,true] while(i>sqrt(a)||(w!=0))[/mw_shl_code]
应改为[mw_shl_code=c,true]while(i<=sqrt(a)&&w==0)[/mw_shl_code]
注意while后的()中填的是执行循环体的条件,而非终止循环的条件。
还有[mw_shl_code=c,true] if (n%i==0)
w=0;
[/mw_shl_code]
N-S图中说此时应把1,而非0,赋给w
修改完的代码:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int w,n,i;
double a;
scanf("%d",&n);
w=0;
i=2;
a=(double)n;
while(i<=sqrt(a)&&w==0)
{
if (n%i==0)
w=1;
else
i++;
}
if(w==0)
printf("%d是素数\n",n);
else
printf("%d不是素数\n",n);
system("pause");
return 0;
}[/mw_shl_code]
另外int向double的转化容易造成精度损失,因此应尽力避免
[mw_shl_code=c,true]a=(double)n;[/mw_shl_code]
之类的强制类型转化。 |
|