这个正则表达式如何找到素数?

时间:2010-07-21 03:18:30

标签: regex primes

  

可能重复:
  How to determine if a number is a prime with regex?

This page声称这个正则表达式发现非素数(以及反例:素数):

/^1?$|^(11+?)\1+$/

这如何找到素数?

2 个答案:

答案 0 :(得分:88)

我认为这篇文章解释得很好,但我也会尝试一下。

输入格式为unary。 1为1,2为11,3为111等.Zero为空字符串。

正则表达式的第一部分将0和1匹配为非素数。第二个是魔术开始的地方。

(11+?)从找到除数开始。它首先定义为11或2. \1是一个引用之前捕获的匹配的变量,因此\1+确定该数字是否可被该除数整除。 (111111首先将变量分配给11,然后确定剩余的111111重复,因此6可以被2整除。)

如果数字不能被2整除,则正则表达式引擎会递增除数。 (11+?)变为111,我们再试一次。如果正则表达式在任何时候匹配,则该数字具有不产生余数的除数,因此该数字不能是素数。

答案 1 :(得分:6)

我花了一分钟才意识到这是针对base-1中的数字(一元?)

this ycombinator discussion中的几个人很好地解释了这一点。实际上这些解释比我想的更简洁,所以我会把它留给链接。