如何将botstream转换为基本20号



给定的是一个bitstream(连续的lit太长而无法一次处理),结果应该是匹配的base20数字流。

对于少数位的过程很简单:

假设最重要的位正确:

110010011 = decimal 403 (1 * 1 + 1 * 2 + 1 * 16 + 1 * 128 + 1 * 256)
403 / 20 = 20 R 3
20 / 20 = 1 R 0
1 / 20 = 0 R 1
Result is [3, 0, 1] = 3 * 1 + 0 * 20 + 1 * 400

但是,如果钻头太多,无法在一个步骤中转换为十进制数字?

我的方法是在循环中进行两个过程:将钻头转换为十进制并将小数转换为基本20号。这个过程要求在穿过钻头时要降低乘数(位置值),因为否则,它们很快就会增加太多以至于无法计算。第64位会乘以2^64,依此类推。

注意:我理解了一个问题,即botstream到达未知的长度,在未知的持续时间以及从基数2到基数20的现场转换到20应该做。


我不认为这可以在一次旅行中完成。问题是基本20和基本2没有共同点,模块化算术规则不允许干净地解决问题。

(a+b) mod n = ( (a mod n) + (b mod n) ) mod n
(a*b) mod n = ( (a mod n) * (b mod n) ) mod n    
(a^m) mod n = ( (a mod n)^m ) mod n    

现在,如果您有一个数字 a 在base p q p< q )中写的AS

A = Sum[a[i] p^i, i=0->n] = Sum[b[i] q^i, i=0->n]

然后我们知道b[0] = A mod q。但是,我们不知道 a ,因此,上面告诉我们

b[0] = A mod q = Sum[a[i] p^i, i=0->n] mod q
               = Sum[ (a[i] p^i) mod q, i=0->n] mod q
               = Sum[ ( (a[i] mod q) (p^i mod q) ) mod q, i=0->n] mod q

这意味着:

如果您想知道最低数字 b 0 base q 中的数字,则需要了解完整的知识编号。

只有 q = p m as

b[0] = A mod q = Sum[a[i] p^i, i=0->n] mod q
               = Sum[ (a[i] p^i) mod q, i=0->n] mod q
               = Sum[ a[i] p^i, i=0->m-1]

简而言之,因为q = 20和p = 2。此外,提醒自己,我只谈论基础Q中的第一个数字,而不是ITH Digit。

作为一个例子,想象一下1000次0的位流,其次是单个1。这类似于数字2 1000 。第一个数字很容易,但是要获得任何其他数字...您本质上是一个相当艰难的地方。

最新更新