irc*_*ell 20
在这里(使用PHP的PCRE语法):
^(0*|(1(01*?0)*?1|0)+?0{4})$
Run Code Online (Sandbox Code Playgroud)
用法:
preg_match('/^(0*|(1(01*?0)*?1|0)+?0{4})$/', decbin($number));
Run Code Online (Sandbox Code Playgroud)
现在,它为什么工作:
我们知道48真的是公正的3 * 16.16只是2*2*2*2.因此,任何可被2 ^ 4整除的数字将在其二进制表示0中具有4个最多位.因此,通过结束regexp 0{4}$等同于说该数字可被2^4(或16)整除.那么,左边的位需要被3整除.所以使用这个答案的正则表达式,我们可以判断它们是否可被3整除.因此,如果整个正则表达式匹配,则数字可以被3和16整除,因此48 ......
QED ...
(注意,前导0|案例在$number0 时处理失败的匹配).我从这个测试的所有数字0到48^5,并正确每次比赛...