武警南京指挥学院官网:我写了一个判断素数的C程序却不知道哪儿错...

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 15:07:30
运行编译通过但结果总是不对..
#include<stdio.h>
void main()
{
int m, i , k;
scanf("%d",&m);
k=m-1;
for(i=2;i<=k;i++)
{
if(m%i==0)break;
if(m%i!=0) printf("%d is a prime number",m);
else printf("%d is not a prime number\n",m);
}
无论输入任何整型数都显示%dis not a prime number
...
潭浩强那本书上的例题我看过了~~他的算法我懂~~但想换一个自己的算法却不对...

错误很明显,你把:
if(m%i!=0) printf("%d is a prime number",m);
else printf("%d is not a prime number\n",m);
这两句放在了循环里面,如果m%i!=0则会输出
("%d is a prime number",m)这句,而
("%d is not a prime number\n",m)这句根本就不会输出,因为m%i == 0时,break语句跳出了循环,程序也随之结束了。要修改这个问题可以向楼上的那位朋友那样,添加一个标志位l(l=0为素数)。另外,把循环条件改为:for(i=2;i<=sqrt(m);i++)效率要高得多。
还有,2也是素数,所以还要在循环里加上
if(m == 2)
{
l = 0;
break;
}

改如下
int l=0;
for(i=2;i<=k;i++)
{
if(m%i==0)
{ l=1;
break;
}
}
if(m=1)printf("%d is not a prime number\n",m);
if(m=0)printf("%d is a prime number",m);