使用正则表达式判断二进制数字是否能被3整除
问题
写一个正则表达式,匹配所有能被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