使用正则表达式验证素数

Posted harelion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用正则表达式验证素数相关的知识,希望对你有一定的参考价值。

今天看到了这种相当奇妙的验证方法,原代码是JS的,但是算法对于py同样适用。

原代码如下:

 1 function ss(d) {
 2     if (d <= 3) {
 3         return true;
 4     }
 5     //将数值转成111
 6     var str = ‘‘;
 7     while (--d >= 0) {
 8         str += 1;
 9     }
10     console.log("str:", str);
11     return !/^(11+?)\1+$/.test(str)
12 }
13 
14 // 测试
15 for (var i = 2; i < 100; i++) {
16     if (ss(i)) {
17         console.log(i)
18     }
19 }

试验结果显示这种算法确实有效。

这个算法实际上是讲数字转换成全为1的长度等于数值大小的字符串,然后对字符串进行匹配。

在非贪婪模式下,11+可以匹配11,也可以匹配到111,然后通过\1反向引用,可以同时匹配两种模式。满足这两种模式的判断为非素数(正则的test方法结果取非),不满足的则是素数。

具体的数学原理目前不太明白,记录以备增补。

 

这种算法的优点是不需要顺序遍历n/2次,在对计算量有限制的场合很有效。但是由于需要构建数值大小长度的字符串,如果数值太大,则会占用相当大的内存,可能造成内存溢出。可以认为是一种空间换时间的解决方案。

 

以上是关于使用正则表达式验证素数的主要内容,如果未能解决你的问题,请参考以下文章

如何确定一个数字是不是是正则表达式的素数?

这个正则表达式如何找到素数? [复制]

Java中使用正则表达式验证手机号码,大家看我的代码有啥问题,没得出正确的结果。

通过 Java 正则表达式提取 semver 版本字符串的片段

jquery正则表达式验证:验证纯中文

js 常用正则表达式表单验证代码