如何巧用一个正则表达式判断素数(质数)

2025-10-10 13:45:57

1、先来看这个正则表达式

/^.?$|^(..+?)\1+$/

下面按顺序解释一下:

/表示正则表达式开始或结束

^表示匹配字符串的开头

.表示任意单个字符(除了换行、制表符、空格等空字符)

?表示出现0次或1次

$表示匹配字符串的结尾

|表示逻辑或

^表示匹配字符串的开头

(子表达式开头扩起来

.表示任意单个字符(除了换行、制表符、空格等空字符)

+表示出现1次或更多次

?表示出现0次或1次

)子表达式结尾扩起来

\1表示匹配前面的子字符串

+表示出现1次或更多次

$表示匹配字符串的结尾

/表示正则表达式开始或结束

如何巧用一个正则表达式判断素数(质数)

2、在JS中,可以使用这个正则表达式,来判断一个正整数是否为素数。

使用语法:

!/^.?$|^(..+?)\1+$/.test(Array(你的数字+1).join('1'))

结果为true,表示是素数

结果为false,表示不是素数(为1或者合数)

如何巧用一个正则表达式判断素数(质数)

3、具体我们来用Chrome浏览器来演示:

首先,我们打开Chrome浏览器,按下F12进入开发者调试界面。

点击Console,进入控制台。

如何巧用一个正则表达式判断素数(质数)

4、在控制台中输入上述代码,

并且修改代码中需检验是否为素数的数字,

例如: 19

然后按下回车,查看结果。

结果为true,表示是素数。

结果为false,表示不是素数。

如何巧用一个正则表达式判断素数(质数)

5、注意,在JS中,由于数组有长度限制。

最大长度为Math.pow(2,32) ,即4294967296

如果你需要检验的数字,比4294967296还大,

那么上述代码中的Array就会报错。

此时,我们可以使用for循环改写一下

即用for循环来把字符串拼接起来,进行素性测试。

var t='';for(var i=0;i<你的数字;i++){t+='1'} !/^.?$|^(..+?)\1+$/.test(t)

上述代码中加粗部分你的数字,修改为实际需要检测的正整数即可。

如何巧用一个正则表达式判断素数(质数)

6、最后,我们来介绍一下,

如何借助上面的素数检验的正则表达式,

来快速打印素数表。

分别以100以内和1000以内的素数表为例。

我们只需在Chrome控制台,输入代码

var t=[];for(var i=1;i<100;i++){if(!/^.?$|^(..+?)\1+$/.test(Array(i+1).join('1'))){t.push(i)}} t.join(' ')

其中加粗部分数字100,可以改为你希望的数字,

用于控制质数输出的最大范围(注意,不要超过4294967296,否则要改写代码)。

如何巧用一个正则表达式判断素数(质数)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢