多语言展示
当前在线:1052今日阅读:61今日分享:18

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

我们知道素数在理工科学习、计算机工程研发中尤其重要,不管是在校学习,还是在科研工程中,都有必要掌握一些判断素数和打印素数(质数)的技能。本文分享给大家使用正则表达式,判断数字是否为素数的技巧。
工具/原料

Chrome

方法/步骤
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,否则要改写代码)。

注意事项
2

正则表达式简洁,但是并不高效,不适合检验超大的数字是否为质数

推荐信息