gpt4 book ai didi

c++ - 数字 3、5 和 7 未显示为质数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:43 25 4
gpt4 key购买 nike

我需要创建一个函数来生成两个输入数字之间的素数。我通过测试范围内每个数字的素数来做到这一点。问题是数字 3、5 或 7 永远不会显示。我不确定出了什么问题。

这是我测试数字素数的方式:

bool isPrime(int number){
using namespace std;
if((number%2==0) || (number%3==0) || (number%4==0) || (number%5==0) ||
(number%6==0) || (number%7==0) || (number%8==0) || (number%9==0))
{
return false;
}
else if ((number/1==number) && (number/number==1))
{
return true;
}
}

最佳答案

3 是 3 的倍数。5 是 5 的倍数。7 是 7 的倍数。您编写的代码对 3、5 或 7 的任意倍数返回 false,因此它不可能为那些数字。您只需要检查小于您正在检查的数字的素数的整除性。

您还检查是否可以被许多不必要的合数整除;例如,一个数字不能是 4 的倍数而不是 2 的倍数,并且它不能是 6 的倍数而不是 2 3 的倍数。这些检查什么都不做除了浪费时间。

最后,从长远来看,您的代码在 100% 的情况下都是错误的,因为它检查的最高质数是 7。它会说 169 (13 * 13) 是质数,因为它不能被任何你检查的数字,但它显然是复合的。对于试验除法,您需要检查 所有 小于或等于 floor(sqrt(n)) 的素数,方法是对组合进行大量不必要的检查,或者通过构建素数列表随你去(类似于埃拉托色尼筛法,通常被 CS 类型称为它,但我不认为它是严格等同的)。

关于c++ - 数字 3、5 和 7 未显示为质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260683/

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