答案 0 :(得分:88)
我认为这篇文章解释得很好,但我也会尝试一下。
输入格式为unary。 1为1
,2为11
,3为111
等.Zero为空字符串。
正则表达式的第一部分将0和1匹配为非素数。第二个是魔术开始的地方。
(11+?)
从找到除数开始。它首先定义为11
或2. \1
是一个引用之前捕获的匹配的变量,因此\1+
确定该数字是否可被该除数整除。 (111111
首先将变量分配给11
,然后确定剩余的1111
是11
重复,因此6可以被2整除。)
如果数字不能被2整除,则正则表达式引擎会递增除数。 (11+?)
变为111
,我们再试一次。如果正则表达式在任何时候匹配,则该数字具有不产生余数的除数,因此该数字不能是素数。
答案 1 :(得分:6)
我花了一分钟才意识到这是针对base-1中的数字(一元?)
this ycombinator discussion中的几个人很好地解释了这一点。实际上这些解释比我想的更简洁,所以我会把它留给链接。