【发布时间】:2011-12-02 01:30:01
【问题描述】:
所以我正在做欧拉计划,因为亲爱的上帝,我需要练习编写代码,而且我的数学技能已经生锈了。因此;欧拉计划。我相信这里的大多数人已经看到或听说过这个问题,但为了完整起见,我将其放在这里:
13195 的质因数是 5、7、13 和 29。 600851475143这个数的最大质因数是多少?
为此,我编写了两个函数:
from math import sqrt
def isprime(n):
if n == 1:
return False
elif n == 2:
return True
elif n % 2 == 0:
return False
for x in range(3, round(sqrt(n))+1, 2):
if n % x == 0:
return False
else:
return True
这只是检查任何馈送数的素数。它按预期工作(据我所知),但现在我已经说过我不确定了。无论如何,它首先检查特殊情况:1(从不素数)、2(素数)或者它是否可以被 2 整除(不是素数)。如果没有任何特殊情况发生,它会运行一般素数测试。
这是我的分解代码:
def factorization(n):
factor = 2
x = 3
while True:
if n % x == 0:
if isprime(x):
factor = x
n = n // x
if n == 1:
return factor
else:
return factor
x += 2
这绝对不是按预期工作的。可悲的是,它正在为 Project Euler 问题的特定值工作,但它不适用于 100。我不确定我需要做什么来解决这个问题:如果它是一个像这样的数字,会发生什么100,它会正确找到前 5 个(2*2*5),但之后会循环并设置 x = 7,这将使整个事物无限循环,因为答案是 2*2*5*5。递归在这里有帮助吗?我试过了,但它并没有变得更漂亮(对于某些数字,它仍然会进入无限循环)。我现在不确定如何解决这个问题。
【问题讨论】:
-
我很困惑,
n = n应该做什么?你也从来没有给n分配任何东西。 -
@slugonamission // 在 python 中不是注释,它是 int 除法。 n = n / x 将产生一个浮点数,// 产生一个 int
-
哦,是的,抱歉(我的 Python 有点生锈了)。
-
你是如何使用 factorization() 函数的?它应该返回什么?我为 Euler-3 写的那个是递归的,它返回一个素因子列表。
-
为了更加混淆 SO 语法高亮,您可以使用
n//=x
标签: python python-3.x primes