Python 计算一个非常大的整数的素数因子

Python 计算一个非常大的整数的素数因子,python,math,prime-factoring,Python,Math,Prime Factoring,我在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 ==

我在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)))

正常情况下,该代码工作正常,没有问题。但是,假设我们将
211111112222223420
传递给
func
。它将打印以下因素:
2,2,2,2,2,2,19,97178980536338
。这显然不可能是真的,因为我们想要找到的因子以零结尾,这意味着它的因子中必须至少有一个5。对吗?事实上,如果将打印的因数乘以,结果将是
211111112222223424
(比传递的数字多四个单位)。我做错了什么?

使用
/
而不是
/
。在Python3中,
/
操作符为您提供了一个浮点,这会引入不精确性。如果您改用
/
,您将坚持使用ints,这将为您提供正确的答案

def func(编号):
当数字%2==0时:
数字=数字//2
印刷品(2)
对于范围内的i(3,math.ceil(math.sqrt(number))+1,2):
当编号%i==0时:
number=number//i
印刷品(一)
如果数字>2:
打印(数字)
func(211111112222223420)
给予


“你是对的,@khelwood。非常感谢。问题解决了。但为什么?!我的意思是,为什么引入浮动会引起问题?因为浮动是近似值。它们可能与您希望的值略有偏差。如果这是Python3,您需要使用
number//i
而不是
number/i
。后者将给出浮点结果。
2
2
5
1181
1321
1747
3872893