prime函数没有起到判断是否为素数的作用。
错误点: 循环条件为while(i
先弄清判断素数的方法:
一个数n,用2~ n-1(用 i 来控制)去除n ,若余数为0,则n不为素数;若在i的范围内余数一直不为0,则n除了1和本身无其他数整除,为素数,此时可有判断条件i==n。
建议是用for循环好点,这里就依你的do...while修改一下,小细节应该int i=1:
下面供个参考:
int prime(int x)
{
int i=1,m;
do
{
i++;
if(x%i==0) break;
}while(i
else m=1;
return m;
}
再建议可以去掉变量m,直接return 0或return 1更加简洁。
逻辑错误:以你现在的逻辑有用的操作仅仅是循环的最后一次
if(x%i==0) m=1;
else m=0;}
也就是程序运行的结果为只有能被起本身-1整除的才返回1。问题的重点在于何时修改m的值。
应该是
m=0; // 假定这个数为素数
do
{
if(x%i==0)
{
m=1; 只要这个数能被2与他本身-1之间的某个数整除,那这个数指定不是素数,break就行
break;
}
i++;
}while(i