我正在寻找一些正则表达式/自动机帮助。我仅限于+
或 Kleene Star。解析表示三进制数的字符串(如二进制,只有 3),我需要能够知道结果是否为 1 小于 4 的倍数。
所以,例如120 = 0*1+2*3+1*9 = 9+6 = 15 = 16-1 = 4(n)-1
。
即使是指向模式的指针也会非常有帮助!
我正在寻找一些正则表达式/自动机帮助。我仅限于+
或 Kleene Star。解析表示三进制数的字符串(如二进制,只有 3),我需要能够知道结果是否为 1 小于 4 的倍数。
所以,例如120 = 0*1+2*3+1*9 = 9+6 = 15 = 16-1 = 4(n)-1
。
即使是指向模式的指针也会非常有帮助!
您可以生成一系列值以在 bash 中使用 bc 进行一些观察:
for n in {1..40}; do v=$((4*n-1)); echo -en $v"\t"; echo "ibase=10;obase=3;$v" | bc ; done
3 10
7 21
11 102
15 120
19 201
23 212
27 1000
31 1011
...
请注意,每个数字的值(十进制)交替地比可被 4 整除的值大 1 或小 1。所以第 1(lsb)位是 0 多一,第 3(第 2)位是比 4 少 1,第 9(第 3)位是比 8 多 1,第 27(第 4)位是比 28 少 1,依此类推.
如果将所有偶数位和所有奇数位相加,然后将奇数位加 1(如果从 1 开始计数),您应该得到相等。
在您的示例中:奇数:(0+1)+1,偶数:(2)。所以它们是相等的,所以这个数是 4n-1 的形式。