zoukankan      html  css  js  c++  java
  • 使用正则表达式验证素数

    今天看到了这种相当奇妙的验证方法,原代码是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次,在对计算量有限制的场合很有效。但是由于需要构建数值大小长度的字符串,如果数值太大,则会占用相当大的内存,可能造成内存溢出。可以认为是一种空间换时间的解决方案。

  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/harelion/p/5598039.html
Copyright © 2011-2022 走看看