如何解决Python:素数分解大整数除法始终返回不正确的结果
def prime_factorisation(num):
prime_factorisation_list = []
prime = 2
while prime**2 <= num:
if not num % prime:
prime_indexes = [item[0] for item in prime_factorisation_list]
if prime in prime_indexes:
position_in_list = prime_indexes.index(prime)
prime_factorisation_list[position_in_list][1] += 1 # Increments count for prime factor
else:
prime_factorisation_list.append([prime,1]) # Creates count for prime factor in the form [prime,count]
num /= prime
else:
prime += 1
if num > 1:
prime_factorisation_list.append([int(num),1])
return prime_factorisation_list
number = 2938475648329038472
print(prime_factorisation(number))
它是一种素数分解算法,它以以下形式返回列表列表: [[主要因素 1,没有。它发生的次数],[主要因素2,没有。它发生的次数],...]
但是行:num /= prime
似乎给了我错误的结果。
我认为这是浮点除法的问题,因为当我用它代替 num //= prime
时,它返回正确的结果。
我知道浮点数的最大值是 309 位,但这远少于此数。我本质上也是在做整数除法(将一个数除以它的一个因数),所以小数点应该是零点。
谁能向我解释为什么会发生这种情况?
解决方法
它给你正确的结果,因为 // 是整数除法,你的目的是找到质因数。
真正的划分本身是不准确的。看看这个document ("what every programmer should know about floating point arithmetic")。关于这件事。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。