【发布时间】: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 下面的回答帮助了我。