Skip to main content
 首页 » 编程设计

python之因式分解代码不适用于大数

2025年05月04日13lyhabc

我有一个很大的 512 位数 n,我需要将 n-1 重写为 m*2k 这是我写的代码: # 写入 (n-1) = m*2^k(其中 m 为奇数)

k = 0       # number of times we were able to divide by 2 
total = (n-1)                                                                      
 
while total % 2 == 0:                                                              
    total /= 2                                                                     
    k += 1                                                                         
 
m = int(total)                                                                                      
assert (n-1) == (2**k) * m          # this does not hold true for large values of n for some reason 

问题是它不适用于 n 的大值(515 位),例如: 871159945406388921782173885460195483437365004709624340762495475804157815638121598376571939076752706526773113110248444755593621508 17487924709

对于上面的n值,我的代码发现k=460,m=2926172291557515

当我在 python 中评估 2926172291557515 * 2**460 时,我得到: 871159945406388988940192305566962631664707089434598271509772046093636647706453926627976745121379172969655935717029240456622616869 87369584640

不等于 n-1。有谁知道为什么会这样?我认为这与拥有如此大的数字有关(此代码适用于我测试过的较小数字。

请您参考如下方法:

出现问题是因为您使用的是浮点除法的/=。将其替换为 //= 或整数除法,您的代码将起作用。