美文网首页
用正则判断能否被3整除

用正则判断能否被3整除

作者: gattonero | 来源:发表于2019-02-15 01:01 被阅读0次

问题

使用正则判断n能否被3整除

思路

根据整除性构建DFA(确定有限自动状态机),再根据DFA构建正则(Kleen算法

解决

我们从高位读取字符串,并将余数作为状态,有如下状态转移表:
X |'0''1'
0 | 0 1
1 | 2 0
2 | 1 2
(X表示 状态\当前字符)
比如说状态是2,说明当前数字除3余2,那么当前字符是'0'时,余数自然是1,应该转移到1状态

DFA如下:


DFA

初始状态是0,我们只要判断终结状态是否为0即可
观察图中的一个自环和一个0-1-2-1-0的大环,我们可以写出两种正则
0*
1(01*0)*1
故得到 (0 | 1(01*0)*1)*

代码

for(var i=1;i<100;i++)
 if(!/^(0|1(01*0)*1)*$/.test(Number(3*i).toString(2))) console.log(i)//undefined

Tips

  • 符合要求的正则不止一个,但是上述正则应该是最简单的之一
  • 按照相应算法,可以获得任意数字的整除性判断正则

Ref

https://en.wikipedia.org/wiki/Kleene%27s_algorithm
https://zhidao.baidu.com/question/1383837207982172220.html
Algorithm 4th P518

相关文章

  • 用正则判断能否被3整除

    问题 使用正则判断n能否被3整除 思路 根据整除性构建DFA(确定有限自动状态机),再根据DFA构建正则(Klee...

  • 数字求和法

    数字求和法即通过一个数各数位上的数字和来判断这个数能否被某个数整除。 1、被3整除数字和是3的倍数 2、被9整除数...

  • 数学基础常识-数论-自然数整除性质及证明

    整除的概念: 整除的判断规则: 1、被2、5整除:末位被2、5整除。 2、被4、25整除:末两位被4、25整除 3...

  • 判断输入的数字能否被3整除

  • Day3 作业

    写出判断一个数是否能同时被3和7整除的条件语句 写出判断一个数是否能够被3或者7整除,但是不能同时被3或者7整除 ...

  • FizzBuzzWhizz作业

    1.主要思路先定义一个空字符串变量result,用来存储输出结果,依次判断数字n能否被3、5、7整除,如果能被3整...

  • Day3-运算符&变量&作业

    作业 写出判断一个数是否能同时被3和7整除的条件语句 写出判断一个数是否能够被3或者7整除,但是不能同时被3或者7...

  • pyhton 解析式

    列表解析式 带条件判断的列表解析式, item满足被2整除,被3整除 集合解析式 字典解析式

  • ZZULIOJ1028: I love 闰年!

    判断闰年 tips 判断闰年的方法:被4整除但不被100整除,或者被400整除 员工薪水 注意中间段也要算上

  • Python测试题

    打印9 * 9乘法口诀表: 判断是否是闰年: 能被4整除但不能被100整除,或者可以被400整除

网友评论

      本文标题:用正则判断能否被3整除

      本文链接:https://www.haomeiwen.com/subject/kfuueqtx.html