计算一个非常大的整数的质因数

问题描述

我在使用 Python 时遇到了一个有趣的问题。我的任务是计算给定数字的所有质因数。这是我的代码:

import math

def func(number):
    while number % 2 == 0:
        number = number / 2
        print("2")

    for i in range(3,math.ceil(math.sqrt(number)) + 1,2):
        while number % i == 0:
            number = number / i
            print(i)

    if number > 2:
        print(str(int(number)))

通常这段代码是有效的,没有问题。但是,假设我们将 211,111,122,222,223,420 传递给 func。它将打印以下因素:2,2,19,97,178980536338。这显然不是真的,因为我们要找到其因数以零结尾的数字,这意味着它的因数中必须至少有一个 5。对?实际上,如果将打印的因子乘以倍数,结果将是 211,424(比传递的数字多四个单位)。我做错了什么?

解决方法

使用 // 而不是 /。在 Python 3 中,/ 运算符为您提供一个浮点数,这会导致不准确。如果您改用 //,您将坚持使用整数,它会给您正确的答案。

def func(number):
    while number % 2 == 0:
        number = number // 2
        print(2)
    for i in range(3,math.ceil(math.sqrt(number)) + 1,2):
        while number % i == 0:
            number = number // i
            print(i)
    if number > 2:
        print(number)

func(211111122222223420)

给予

2
2
5
1181
1321
1747
3872893

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...