繁体   English   中英

欧拉计划 #3 Python

[英]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 的值永远不会改变

找到最多 √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 的 %(模数)。
    • 如果有素数列表,则只检查/迭代
    • 除非,忽略偶数检查数字如 9,15,21... 是素数与否,是没有价值的所以...
      • 除 2 外,所有素数都是奇数。
      • 所以在用 2 检查 N 之后,只用奇数检查 N。

找到最多 √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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM