开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

js 正则之检测素数

简介: 原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题。原文《检查素数的正则表达式》,在文章里已经解释了他是怎么判断的,我就不啰嗦了。
+关注继续查看
原文:js 正则之检测素数

相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题。
原文《检查素数的正则表达式》,在文章里已经解释了他是怎么判断的,我就不啰嗦了。
我们来说说 js 如何实现它吧。

先来看看什么是素数,在《质数 - 百度百科》里有详细的说明,而且也说了一些求素数的方法,什么6N+1法等。。
这些什么算法都不是我们要谈的,我们只说正则。

在那篇文章里给出的正则是 /^1?$|^(11+?)\1+$/
其实我觉得完全没必要检测 0 1 之类的,因为根据百度百科里的解释,素数是从 2 开始的。
所以只要加一个判断条件 n < 2 的都不是素数,其他的则用 /^(11+?)\1+$/ 进行验证即可,
不仅提升了效率,而且防止传入负数而报错。

我们先来写个遍历 n 以内素数的函数吧。

/**
 * 遍历素数
 * @param  {Number} max 遍历 2-max 之间的素数
 * @return {Array}      返回 2-max 之间所有素数
 */
function prime(max) {
    var re = new RegExp('^(11+?)\\1+$'), // 检测质数正则
        str = '1', // 根据当前 i 生成对应个数 1 
        i = 1, // 计数器
        ret = []; // 质数结果集
    while (max > i++)
        re.test(str += '1') || ret.push(i);
    return ret;
}
var arr = prime(100);
console.log(arr);

在代码里发现  var re = new RegExp('^(11+?)\\1+$')  为什么不直接写  var re = /^(11+?)\1+$/  呢?
回去翻下我写的几篇正则文章就会找到答案了。
最传统的写法往往是嵌套循环来遍历素数,但是有了正则的帮助,代码简洁优雅。

如果要判断素数的话,那就更简洁了。

/**
 * 判断是否是素数
 * @param  {Number} n  要判断是数字
 * @return {Boolean}   返回 true|false
 */
function isPrime(n) {
    return n < 2 ? false : !/^(11+?)\1+$/.test(Array(n + 1).join('1'));
}

console.log(-2, isPrime(-2));
console.log(1, isPrime(1));
console.log(2, isPrime(2));
console.log(11, isPrime(11));

好了,今天的分享就这么点东西,虽然没什么实际用途,但是可以开阔大家的眼界。
正则不仅仅就是匹配字符串,还能判断素数,二元/三元方程有无解等等等等看似不可思议的逻辑。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
js检测滚动条到底部
js检测滚动条到底部
0 0
JS——数据类型/数据类型的检测、判断以及获取
JS——数据类型/数据类型的检测、判断以及获取
0 0
js检测浏览器及系统信息
js检测浏览器及系统信息
0 0
js检测文章是否被收录
js检测文章是否被收录
0 0
js检测文章是否被百度收录
js检测文章是否被百度收录
0 0
js 前端密码强度检测zxcvbn的使用(含react示例)
js 前端密码强度检测zxcvbn的使用(含react示例)
0 0
《JS原理、方法与实践》- canvas作图(二)- 组合、剪切、坐标检测
《JS原理、方法与实践》- canvas作图(二)- 组合、剪切、坐标检测
0 0
js小效果之聊天界面检测输入状态
js小效果之聊天界面检测输入状态
0 0
js检测浏览器终端
js检测浏览器终端
0 0
JavaScript 技术篇-js检测原生对象类型实例演示,js的3种对象类型
JavaScript 技术篇-js检测原生对象类型实例演示,js的3种对象类型
0 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Javascript中的函数
立即下载
Javascript异步编程
立即下载
JS零基础入门教程(上册)
立即下载