我在使用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
(比传递的数字多四个单位)。我究竟做错了什么?
使用//
代替/
。在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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句