问题

写一个正则表达式,匹配所有能被3整除的二进制数。比如:
11 √
110 √
1001 √
1011 ×

整除与余数

判断一个数能否被另一个数整除,可以转化为判断一个数被另一个数除后的余数是否为0。假设被判断的数为N,除数为m,余数为d,那么有:
N=i*m+d

假设有N=abcde=a*x^4+b*x^3+c*x^2+d*x+e,(x为进制)。
同时定义N(0)=0,N(1)=a,N(2)=ab……N(5)=abcde,那么有:
N(0)=0      N(0)%m=0
N(1)=a      N(1)%m=a%m
N(2)=a*x+b  N(2)%m=(a*x+b)%m

由于取余满足性质:
(1) (a+b)%c = ((a%c)+(b%c))%c;
(2) (a*b)%c = ((a%c)*(b%c))%c;

那么:
N(2)%m=(a*x+b)%m
             =((a*x)%m+b%m)%m
             =((a%m*x%m)%m+b%m)%m
             =((N(1)%m*x%m)%m+b%m)%m

也就是说,判断N是否能被m整除,可以转换为关于N的每一位数字、被除数和进制的递推公式Read the rest