【问题标题】:Prime number checker function is faulty质数检查器功能故障
【发布时间】:2011-11-04 00:30:38
【问题描述】:

我写了一个函数来计算一个数字是否是素数,但尽管尝试,它似乎无法给出正确的响应。它还打印正在递增的 n 值。这是函数的代码(顺便说一下,在 Python 中):

def isPrime(x):
    for n in range(1, x):
        print n
        if x % n == 0:
            return False
    return True

如果我输入

isPrime(17)

函数返回

1
False

这里出了什么问题?

【问题讨论】:

  • 质数定义错误
  • 附带说明:优化素数检查器的方法有加载种,但一种简单的方法是:检查到 x 的平方根。因此,添加from math import sqrt, floor,然后将您的范围更改为range(2,floor(sqrt(x)))
  • 你的原始逻辑,作为pythonic one liner:def isPrime(x): return x > 1 and all(x % n for n in xrange(2,x))

标签: python primes


【解决方案1】:

每个数字都可以被 1 和它自己整除。素数是一个自然数,除了 1 和它自身之外没有正除数other。因此,如果你从 1 开始你的 for 循环,每个 数字 x 将在第一次迭代中通过条件 x % 1 == 0,返回 False

要修复它,您需要从 2 而不是 1 开始循环。另外,作为旁注,您只需从 2 循环到 sqrt(x),因为如果存在一个数字 q > sqrt(x) 来除x,那么还必须有一个数字p = x / q,它也将xp < sqrt(x)相除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2011-06-26
    • 2015-07-25
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多