примечание: Я понял вопрос о том, что поток битов поступает неизвестной длины и в течение неизвестной продолжительности, и необходимо выполнить преобразование в реальном времени из базы 2 в базу 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 , записанное в базе p и q ( p ) как
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 числа в базе q , вам необходимо знать полное число.
Это можно упростить, только если q = p m как
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. Я должен сказать, no , это невозможно сделать за один проход. Кроме того, напомните себе, что я говорил только о первой цифре в базе q, но не о i-й цифре.
В качестве примера представим битовый поток 1000 × 0, за которым следует один 1. Это похоже на число 2 1000 . Первая цифра проста, но получить любую другую цифру ... вы, по сути, в довольно трудном положении.