python - 质数查找器

标签 python primes

所以我正在尝试制作一个素数查找器,为了节省计算时间,我希望它在找到一个不是 1 或数字本身的除数后中止 forloop。现在函数可以工作了,但是它完全忽略了我的 if 语句。我做错了什么?

def prime(number):
    oldnum = number
    factor = 1
    while number > 1:
        factor += 1
        while number % factor == 0:
            if 1< factor < oldnum:
                return 0 # is not prime
                print("yay")
                break
            number //= factor
    return 1 #prime!

最佳答案

您的代码永远不会到达 return 1 行(顺便说一下,它应该是 return True)因为

  • 您的break 语句只会跳出内部while 循环
  • break 语句从未到达,因为您在此之前返回 0

无论如何,您的内部 while 循环应该是一个 if(因为您实际上并没有做任何需要循环的事情)。

如果你改变它(并删除无法访问的代码),它“工作”(除了 prime(1) 的错误结果是 True),这是一个非常查找素数的低效方法。

def prime(number):
    oldnum = number
    factor = 1
    while number > 1:
        factor += 1
        if number % factor == 0:
            if 1 < factor < oldnum:
                return False # is not prime
            number //= factor
    return True # is prime!

关于python - 质数查找器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494239/

相关文章:

python - 与词法作用域和 for 循环作斗争

algorithm - 我无法解决与素数幂模 1e9+7 相关的问题。我认为要解决这个问题,我们必须使用构造算法

algorithm - 为什么我的 Miller Rabin 算法不起作用(Haskell)?

python - 在 Python 中的 BeatifulSoup 中抓取 itemprop ="name"

prolog - 强制变量重新分配(Prolog)

java - 我如何改进 Project Euler 7 的代码?

Lisp 代码没有响应

python - 高效计算 NumPy 数组的成对相等

python - 在微调 GPT-2 模型时如何处理堆栈期望每个张量具有相同大小的误差?

python - Python 2 如何比较字符串和整数?为什么列表比较大于数字,而元组大于列表?