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整队和。而不是找到一个不能被整除就认为后面的数都不能被整除。
明白意思了吗?