如何从余数系统转换为混合基数系统?

Posted

技术标签:

【中文标题】如何从余数系统转换为混合基数系统?【英文标题】:How to Convert from a Residual Number System to a Mixed Radix System? 【发布时间】:2013-04-11 18:33:33 【问题描述】:

我了解Residual Number System 和Mixed Radix system 的概念,但我很难在一个简单的案例研究中找到我发现的任何转换方法。

我从 Knuth 的《计算机编程艺术》开始,但那对转换的理论有点过多,一旦提到欧拉,我就迷路了。***有一个关于这个主题的nice section,我试过here和here,但两次我都无法回到我开始时的号码。

我找到了一篇不错的文章here (PDF),我把相关部分浓缩了here,但是我不明白乘法逆元及其符号。具体来说,如何 y_2 = |(3 - 19)|(1/31)|_7|_7 = |5 * 5|_7 特别是如何 |1/31|_7 = 5

【问题讨论】:

我不确定***的文章是否正确。 感谢您的编辑,我阅读了残数系统页面上的谈话页面,this 值得一读。 【参考方案1】:

乘法逆元是关于模数(这里是 7)。由于模 7 是素数,因此每个数(模 7)都有一个倒数。特别是 31_7 = 3_7(因为 31 = 4*7 +3 - 对不起,如果我太说教了),它的倒数是 5,因为 3 * 5 = 15 = 1_7。所以我们可以写 |1/31|_7 = 5。

现在

y_2 = |(3 - 19) |(1/31)|_7 |_7
    = | (-16) * 5 |_7
    = | 5 * 5 |_7            since -16 = (-3)*7 + 5
    = 4

【讨论】:

我现在明白你是如何得到 |-16|_7 = 5 的,根据我的经验,这是处理负模的一种不寻常的方式,但我可以使用它。我仍然迷失在这个 |(1/31)|_7 = 5 业务上。我知道 |31|_7 = |3|_7,但我并没有反过来关注你。 3 * 5 = 15,但 |15|_7 = 0。 咳咳... 15 = 2*7 + 1,因此 |15|_7 =1。

以上是关于如何从余数系统转换为混合基数系统?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C ++中从十六进制转换为2 ^ 16系统

将十进制转换为任何基数(对基数>=10 使用 switch 语句)

从十进制基数转换为十六进制基数c ++

如何将数值转化为二进制数?

将代码从基数R转换为dplyr,特别是添加变量

以 10 为基数到以 2 为基数的数字转换如何工作?