c++判断是否为质数

1.

bool Isprime(int n){
        int i;
            for(i=2;i<n;i++){
            if(n%i==0)
                return false;
            else(n%i!=0);
                return true;
        }
    }


2.

bool Isprime(int n)
{
    int i;
    for (i = 2; i <= n/2; ++i)
    {
        if (n%i == 0)
        {
            return false;
        }
    }
    if (i > n/2)
    {
        return true;
    }
    else
    {
        return false;
    }
}
    

为什么第二种能通过 而第一种不能,求大佬解答

第一种

for(i=2;i<n;i++){
            if(n%i==0)
                return false;
            else(n%i!=0);
                return true;
        }

这个for循环的逻辑相法有两个

1.从2开始只要碰一个数能被N整除就返回不是质数。这个逻辑没有问题。

2.碰到一个数不能被N整除就返加true也就是这个数是质数。这个逻辑是错的。

假设n=9,在i=2的时候就会走else的分分支从而反回true.

 

如果对你有帮助的话,麻烦关注下我的博客,里面也会连续发布技术类的文章。谢谢。

实际上我们应该在不存在一个数大于2的数能被n整队和。而不是找到一个不能被整除就认为后面的数都不能被整除。

明白意思了吗?