判断质数时,for循环条件理解不够,需要提点一下。

判断质数时若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