如何解决计算一个非常大的整数的质因数
我在使用 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。