我有一个基数为n(无符号)的整数,长度为数十万个字符。
如何将此数字(从文件中读取的字符串)转换为2-256之间的任何基数?在合理的时间当然。
GMP库仅支持2-62碱基。
答案 0 :(得分:4)
GMP使用a clever divide-and-conquer radix change algorithm来表示非常大的整数。
做一些使用相同基本想法的事情并不难。请拨打您的基数r
和输入数字x
。
让每个rp[i] = r^(2^i)
i
直至rp[i]
的原始数字位数的一半左右;拨打最后一个rp[n-1]
。以模rp[n-1]
为单位减少数量。然后,高2^(n-1)
基数 - r
数字是x / rp[n-1]
转换为基数 - r
的数字,低基数 - r
数字是{{ 1}}转换为基础 - x % rp[n-1]
。请注意,您只需计算一次r
。
这比一次提取单个数字更有效率,因为我们将rp
- 位数减少到大约两个k
- 位数而不是k/2
位号码和log(r)
- 位号。