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

标签 c++ algorithm math primes

我需要创建一个函数来生成两个输入数字之间的素数。我通过测试范围内每个数字的素数来做到这一点。问题是数字 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/

相关文章:

c++ - timeval 到字符串(在两者之间转换)

algorithm - 基本加密算法

java - 如何通过付款找到利率

javascript - 定位父元素以使其子元素在屏幕上居中

c++ - 需要澄清这是否使用了 typedef

c++ - 我将如何重新实现 dynamic_cast?

c++ - Boost enable_if问题

c++ - 在知道墙壁在哪里的同时计算房间

algorithm - 多起点和一个终点的旅行商

java - 超几何分布不能很好地工作java