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

  • 相关阅读:
    [POI2013]LUK-Triumphal arch
    [CF1149C](Tree Generator)
    NOI2018归程
    [CF191](Fools and Roads)
    [CF700E](Cool Slogans)
    我石乐志
    想题的时候不要颓废
    人不能忘耻
    反思
    中考加油!
  • 原文地址:https://www.cnblogs.com/harelion/p/5598039.html
Copyright © 2011-2022 走看看