javascript代码实例教程-js 正则之检测素数

发布时间:2019-01-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-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(&#39;^(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脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-js 正则之检测素数全部内容,希望文章能够帮你解决javascript代码实例教程-js 正则之检测素数所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。