Daniel_yuan's Blog

芙卡米天下第一可爱 n(*≧▽≦*)n

0%

用二进制模拟 K 进制

被个三进制下位运算题搞自闭了,琢磨了好久才有了一个看似贼简单的做法,故记录一下。

先考虑怎么用二进制模拟三进制。

\(01\)\(s_0,s_1,s_2\) 依次表示某数在三进制下,数位为 \(0,1,2\) 的位的集合。

不难发现 \(s_0,s_1,s_2\) 两两无交。

那么对于两个数的三进制下位运算,就可以通过枚举两数的 \(s_0,s_1,s_2\),得到两数在三进制下数位为 \(0,1,2,3,4\) 的位的集合。且这些集合也两两无交。

之后再通过位运算的定义,把五个集合重新整理成新的 \(s_0,s_1,s_2\)

复杂度是 \(O(9)\) 的(因为需要枚举 \(s_0,s_1,s_2\))。

类似的,这种做法也可以推广到 K 进制下,复杂度是 \(O(K^2)\) 的。