0

我正在寻找一些正则表达式/自动机帮助。我仅限于+或 Kleene Star。解析表示三进制数的字符串(如二进制,只有 3),我需要能够知道结果是否为 1 小于 4 的倍数。

所以,例如120 = 0*1+2*3+1*9 = 9+6 = 15 = 16-1 = 4(n)-1

即使是指向模式的指针也会非常有帮助!

4

2 回答 2

0

您可以生成一系列值以在 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
...
于 2012-04-06T01:30:46.480 回答
0

请注意,每个数字的值(十进制)交替地比可被 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 的形式。

于 2012-04-20T05:56:16.927 回答