[英]Project Euler #3 Python
这是我对Project Euler Problem 3 的解决方案。 我已经为 Project Euler 编写了这段代码,但是如果我输入“49”,我会得到“49”。 似乎是什么问题?
n = 600851475143
i = 2
while (i * i < n):
while (n % i == 0):
n = n / i
i = i + 1
print (n)
你正在打印n
你想打印i
...
我假设你的意思是 set n = 49
。
您的外部 while 循环检查条件i * i < n
,这对于i == 7
不成立,因此外部循环在达到7
立即中断。 将<
更改为<=
。
但是,您的代码一开始就不正确——也许这就是您的意思?
n = 600851475143
i = 2
factors = []
while (i <= n):
while (n % i == 0):
n = n / i
factors.append(i)
i = i + 1
print factors
您的代码是在假设有多个因子的情况下编写的,但是在 n=49 的情况下,结果证明它只有一个因子是 7,因此您可以添加一行检查它是否具有多个因子,如果没有,那么我应该被打印
可能是通过找到所有质因子然后返回最大值来解决它的最快方法。
蛮力解决方案花了我不到 1 秒
我假设你的意思是n = 49
。
您的代码不正确,但错误很小——将<
更改为<=
,它适用于 Project Euler #3。
尽管如此,代码对 49 等正方形不起作用的问题仍然存在。 这是一段修改后的代码,它也适用于正方形。
n = 49
i = 2
while i * i <= n:
while n % i == 0:
x = n
n = n / i
i = i + 1
if n == 1:
print x
else:
print n
找到 N 的因子只需要检查到 √N。
找到最多 √N 的因子并存储最大的因子。
from math import sqrt
ans = -1
n = input() #or directly put
for i in range(2,int(sqrt(n))+1):
while (n%i==0):
if i > ans:
ans = i
print(ans)
找到最多 √N 的因子并存储最大的因子。
当得到因子时,除 N 直到 N 没有那个因子
找到下一个因素做同样的过程,直到 N 变成 1(没有任何因素)
from math import sqrt
ans = 2
n = input() #or directly put
while (n%2 == 0):
n /= 2
i = 3
while n > 1:
while (n%i == 0):
ans = i
n /= i
i += 2
print(ans)
找到质因数并明显返回最大
from math import sqrt
def is_prime(n):
if n ==2:return True
if n<2:return False
if n%2==0:return False
for i in range(3,int(sqrt(n))+1,2):
if n%i == 0:
return False;
return True;
n = 600851475143
i = n
while(i>1):
if is_prime(i) and is_prime(i) and n%i==0:
print(i);
break
i = i-1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.