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

Python:素数因子分解大整数除法始终返回不正确的结果,python,math,floating-point,division,prime-factoring,Python,Math,Floating Point,Division,Prime Factoring,我有一些这样的代码: 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 prim

我有一些这样的代码:

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))
def素数分解(num):
素数分解列表=[]
素数=2
而素数**2 1:
素数分解列表。追加([int(num),1])
返回素数分解列表
数字=2938475648329038472
打印(素数分解(数字))
它是一种素因子分解算法,以以下形式返回列表列表: [[素因子1,发生次数],[素因子2,发生次数],…]

但是,行:
num/=prime
似乎给出了错误的结果。 我认为这是浮点除法的问题,因为当我用它代替
num//=prime
it时,它返回正确的结果

我知道一个浮点的最大值是309位,但这远小于这个值。我也在做整数除法(将一个数除以它的一个因子),所以小数点应该是零


有人能给我解释一下为什么会发生这种情况吗?

它给出了正确的结果,因为//是整数除法,你的目的是找到素数因子


真正的分裂本身是不准确的。看看这个。关于这个问题。

浮点数不能存储309位数字。它最多可以存储10**309的值,但只存储前17位有效数字。这就是问题所在。你也可以自己检查:
print(2938475648329038472/2)
->
1.4692378241645192e+18
print(2938475648329038472//2)
->
1469237824519236
。在第一种情况下,最后两个值是四舍五入的。哦,我一直认为1.xxx e+yyy表示保存了整个数字,但只显示了一些数字(类似于计算器)。a