这个正则表达式如何找到素数? [复制]
Posted
技术标签:
【中文标题】这个正则表达式如何找到素数? [复制]【英文标题】:How does this regex find primes? [duplicate] 【发布时间】:2011-03-18 18:51:03 【问题描述】:可能重复:How to determine if a number is a prime with regex?
This page 声称这个正则表达式发现了非素数(反例:素数):
/^1?$|^(11+?)\1+$/
这是如何找到素数的?
【问题讨论】:
这不是一个骗局。这是一个不同的正则表达式和不同的技术,并且有更好的答案,可以启动。 @bmargulies:这是骗子。正则表达式是相同的,考虑到这个问题的输入限制,并且 Java 的 String.matches 方法将正则表达式与整个字符串匹配(所以 ^ 和 $ 是隐含的),它显然是这样做的。 @Rog - 那里的赞成答案从未提及一元。 @bmargulies:如果您认为您可以为该问题提供更好或更完整的答案,请这样做。我会将此问题标记为合并,但问题文本中的 表面 差异意味着答案需要进行一些编辑(通常是这种情况),即使在您消除这些表面差异后问题是相同的。 @Rog 在这一点上,我相信钻石会巧妙地合并。 【参考方案1】:我认为这篇文章解释得很好,但我也会尝试一下。
输入格式为unary。 1 是1
,2 是11
,3 是111
,等等。0 是一个空字符串。
正则表达式的第一部分将 0 和 1 匹配为非素数。第二个是魔法发挥作用的地方。
(11+?)
从寻找除数开始。它首先被定义为 11
或 2。\1
是一个引用先前捕获的匹配项的变量,因此 \1+
确定该数字是否可以被该除数整除。 (111111
首先将变量赋值给11
,然后确定剩余的1111
是11
重复的,所以6可以被2整除。)
如果数字不能被 2 整除,正则表达式引擎会增加除数。 (11+?)
变成 111
,然后我们再试一次。如果在任何时候正则表达式匹配,则该数字有一个不产生余数的除数,因此该数字不能是素数。
【讨论】:
这真是太棒了。 这个答案真是太棒了.. :)以上是关于这个正则表达式如何找到素数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章