【问题标题】:I can't figure out what is wrong with this prime checker我无法弄清楚这个主要检查器有什么问题
【发布时间】:2020-10-06 23:46:47
【问题描述】:

我正在尝试解决 Project Euler 问题 3,我是编码新手,所以我确信这可以得到更多优化。本质上,我试图遍历 1 和数字的 sqrt 之间的每个数字,以确定它是否是素数,我的调试一直说它只检查它是否可以被 1 整除,我做错了什么?

# Project Euler Problem #3
# Largest prime factor
# What is the largest prime factor of the number 600851475143?
import math
primelist = []
n = 1

while n < 775147:
    n += 1
    m = int(math.sqrt(n))
    if 600851475143 % n == 0:
        if n % 2 != 0:

             for i in range(1,m):
                print (i)
                if n % i == 0:
                    break
                else:
                    primelist.append(n)

【问题讨论】:

  • i 的值从 1 开始,n % 1 始终为零,因此控制立即跳出 for 循环。
  • 太棒了。这就解释了为什么它只检查可被 1 整除,但真正的问题是它根本不应该测试它。它应该从 2 测试到 sqrt(N)。
  • 是的,Grismar 下面的回答帮助了我。

标签: python primes


【解决方案1】:

for i in range(1, m): 必须是 for i in range(2, m + 1):,因为您不想测试 1m + 1 应该包括在内。

例如,当 n == 9 时,m 将是 3,这就是您所追求的 - range(2, m) 将排除 m

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多