怎么用javascript正则表达式判断质数(javascript,开发技术)

时间:2024-04-25 14:56:19 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E6%80%8E%E4%B9%88%E7%94%A8javascript%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%88%A4%E6%96%AD%E8%B4%A8%E6%95%B0

翻译成JS代码如下

代码逻辑非常简单,生成"1" * n长度的字符串,通过/^1?$|^(11+?)\1+$/正则表达式进行判断,再将结果取反

上面正则表达式有2个分支,分别是

/^1?$

^(11+?)\1+$

分支1 逻辑很简单,就是匹配0或者1个 "1",因为要排除数字1(非质数)

分支2 就有意思了,可以拆成2块来看

^(11+?)

\1+$

表达式1,非贪婪模式下匹配 "11" "111" "1111"....,作为一个分组
表达式2,\1代表将表达式1匹配的结果赋值给\1,判断是否结尾,否的话会触发回溯(因为表达式1可能匹配多种情况)

举个例子就更清晰了,比如传入n = 9,分支1不满足可以直接忽略
^(11+?)\1+$

经过上述的分析,不难发现,其实回溯就是将数字不断除于2、3、4....,最后检查是否有余数,没有的话就匹配成功(非质数),非常简单粗暴的穷举法

仔细看正则匹配的过程分析,其实step 3 ~ step 4的回溯完全没有必要,那么正则可以改写成这样/^1?$|^(11+?)\1+?$/,将\1+改成非贪婪模式\1+?,那么就放弃step 4回溯

耗时上减少了接近一半

本文:怎么用javascript正则表达式判断质数的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Android怎么自定义View下一篇:

2 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18