计算一个非常大的整数的素数



我在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, 2, 2, 2, 2, 19, 97, 178980536338。这显然不可能是真的,因为我们想找到其因子的数字以零结束,这意味着它的因子中必须至少有一个5。正确的事实上,如果您将打印的因子相乘,结果将是211,111,122,222,223,424(比传递的数字多出四个单位(。我做错了什么?

使用//而不是/。在Python3中,/运算符为您提供了一个浮点值,这会导致不准确。如果你使用//,你会坚持使用int,这会给你正确的答案。

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

最新更新