gpt4 book ai didi

c - 我的质数检查器功能无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:45 26 4
gpt4 key购买 nike

所以这个函数应该只返回 0 如果不是质数,如果是质数则返回 1。我看错了吗?例如,当我给它 39 时,它说它返回 1,尽管 39 不是素数。

int is_prime(int number){
if (number == 2) {
return 1;
}

else{
for(loop_counter ; loop_counter < number ; loop_counter++){

if(number%loop_counter == 0){
return 0;

}
else{
return 1;
}

}
}


}

最佳答案

在这个循环中

for(loop_counter ; loop_counter < number ; loop_counter++){

使用了一个未声明的变量loop_counter。如果它是全局变量,则不应在函数中使用它,因为至少不清楚它的值是什么。

同样在循环内,您将在 number%loop_counter != 0 时立即中断其迭代。但这并不意味着这个数是质数。

如果用户将传递负数或零,则该函数将具有未定义的行为。

函数可以这样定义

int is_prime( unsigned int n )
{
int prime = n % 2 == 0 ? n == 2 : n != 1;

for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
{
prime = n % i != 0;
}

return prime;
}

该函数首先排除除 2 之外的所有偶数,因为偶数不是质数。它还排除了数字 1,因为根据定义,数字 1 不是质数。

int prime = n % 2 == 0 ? n == 2 : n != 1;

因此在循环中,考虑偶数的除数是没有意义的。

    for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
^^^^^^

然后在循环中检查给定的奇数 n 是否可以被奇数整除

        prime = n % i != 0;

如果 n % i 等于 0,则变量 prime 的值为 0,并且由于循环中的条件,循环停止迭代。

for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
^^^^^

也可以像这样重写

for ( unsigned int i = 3; prime != 0 && i <= n / i; i += 2 )
^^^^^^^^^^

关于c - 我的质数检查器功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com