关于python:巨大数字上最大的主要因素失败

Largest prime factor on huge number failed

我在研究Euler项目的问题,这是第五个问题:

最大主因子问题313195的主要因素是5、7、13和29。

数字600851475143的最大主因子是什么?

我得到了工作代码:

1
2
3
4
5
6
7
8
9
10
11
12
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},
last factor = {factor}'
) # print for debug only
    return max(x, factor)

系数(19*19*19*19*19*19*19*19*19*19*1999989899)

X=33170854034208712,最后一个系数=182128674

33170854034208712

有人知道这为什么不能给出正确的答案吗?


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

除此之外,您的代码是正确的

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

产量

1
2
x = 577,
last factor = 541

除法运算符差

1
2
3
4
5
6
7
8
9
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


我只是白手起家地讨论这个问题。下面是我的代码,很像你的

1
2
3
4
5
6
7
8
9
10
11
12
13
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