判断质数时若n为3,for循环中i<=n/2不是不成立吗?为什么函数还可以返回1?
int isprime(int n){
if(n==1 ||n==2)return 1;
for(int i=2;i<=n/2;i++){
if(n%i==0){return 0;}
else{return 1;}
}
}
1本身就不是质数,改成下面的代码
int isprime(int x)
{
int i;
if(x==1)
{
return 0;
}
for(i=2;i<x;i++) //这里是“<”而非“<=”.证明了从1到它本身-1都没有其他因数了
{
if(x%i==0)
return 0;
}
return 1;
}
i = 2; i <= n / 2;
n等于3,n/2等于1,1>=2,显然是false,for循环都不会进去。
至于为什么返回1,我理解应该是随机的。你可以在for循环外加return -1,应该就返回-1了。
可以参考下这个。
https://blog.csdn.net/weixin_43862847/article/details/117251603
int isprime(int n) {
if (n == 1 || n == 2)
return 1;
for (int i = 2; i <= n / 2; i++) {
if (n%i == 0) { return 0; }
else { return 1; }
}
return -1;
}
n等于3的时候for没有执行,函数没有返回值,在外面接收的话值不一定是多少,你可以验证一下,在for外面加一个return -1,这样for没执行的话返回值为-1