【问题标题】:Largest prime factor on huge number failed大数的最大素数失败
【发布时间】:2018-12-14 02:14:07
【问题描述】:

我正在研究欧拉计划问题,这是问题五:

最大素数 问题 3 13195的质因数是5、7、13、29。

600851475143 的最大质因数是多少?

我得到了工作代码:

def factor(x, f=2):


    while x >= f*f:
        while x % f == 0:
            x = int(x/f)
        factor = f
        f += 1

    print(f'x = {x},\nlast factor = {factor}') # print for debug only 
    return max(x, factor)

因数(19*19*19*19*19*19*19*19*19*1999989899)

x = 33170854034208712, 最后一个因素 = 182128674

33170854034208712

有谁知道为什么这不能产生正确的答案?

【问题讨论】:

  • (x = 33170854034208712, last factor = 182128674) 这是你得到的答案吗?只是验证,因为我运行了您的代码并检索到:x = 6857, last factor = 1471
  • 嘿,马特!你能告诉我们预期的结果是什么吗? 1999989899 不是质数:1999989899 = 577 * 541 * 149 * 43
  • 看看这个thread。我认为它将解决巨大数字的问题!
  • 这是我错误代码的错误答案。正确答案就是下面提到的太累了。

标签: python prime-factoring


【解决方案1】:

您应该使用整数除法运算符 // 而不是浮点除法运算符 /

除了你的代码是正确的

            while x % f == 0:
                x = int(x//f)
            factor = f

输出

x = 577,
last factor = 541

除法运算符的区别

Python 3.7.1 (default, Nov  6 2018, 18:46:03) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> 
>>> print(645372136089564734321//19)
33966954531029722859
>>> print(645372136089564734321/19)
3.396695453102972e+19

【讨论】:

  • 谢谢,实际上我是在自己进行了一些黑客攻击和研究后才弄清楚的,我没有意识到地板师能做到我想要的。我什至想过导入python27除法函数。好有趣的想法!
【解决方案2】:

我只是从头开始对问题进行推理。下面是我的代码,和你的很像

def largest_prime_divisor(x, f=2):
    while f**2 <= x:
        if x % f == 0:
            x //= f
        else:
            f+=1
    return x

print(largest_prime_divisor(25)) # 5
print(largest_prime_divisor(13195))  # 29

n = 19*19*19*19*19*19*19*19*19*1999989899
print(largest_prime_divisor(n))  # 577 this is prime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多