求大神帮我看个程序。输出一个数字。判断素数还是非素数。必须用到函数的嵌套。帮我看看程序哪里错了。

2024-12-22 15:57:06
推荐回答(2个)
回答1:

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 if(i==x) m=0;
else m=1;

return m;
}
再建议可以去掉变量m,直接return 0或return 1更加简洁。

回答2:

逻辑错误:以你现在的逻辑有用的操作仅仅是循环的最后一次
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