【发布时间】:2013-11-11 05:15:42
【问题描述】:
我有一个以 n 为底(无符号)的整数,长度为数十万个字符。
如何将此数字(从文件中读取的字符串)转换为 2-256 之间的任何基数?当然是在合理的时间内。
GMP 库仅支持碱基 2-62。
【问题讨论】:
我有一个以 n 为底(无符号)的整数,长度为数十万个字符。
如何将此数字(从文件中读取的字符串)转换为 2-256 之间的任何基数?当然是在合理的时间内。
GMP 库仅支持碱基 2-62。
【问题讨论】:
GMP 使用 a clever divide-and-conquer radix change algorithm 处理非常大的整数。
使用相同的基本思想做一些事情并不难。调用您的基数r 和输入数字x。
让每个i 的rp[i] = r^(2^i) 直到rp[i] 的位数大约是原始数字的一半;拨打最后一个rp[n-1]。以 rp[n-1] 为模减少您的数字。那么2^(n-1)基数-r的高位数字是x / rp[n-1]转换为基数-r的数字,基数低-r数字是x % rp[n-1]转换为基数-r的数字。请注意,您只需计算一次rp。
这比一次提取单个数字更有效,因为我们将k-bit 数字减少为两个大致k/2-bit 数字,而不是log(r)-bit 数字和k-log(r) -位数。
【讨论】: