微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:素数分解大整数除法始终返回不正确的结果

如何解决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 举报,一经查实,本站将立刻删除。