2011年11月27日星期日

回复: [PerlChina] 一句很妙的perl腳本(通過正則表達式判斷素數)


  巧妙的无法想象啊!

  举个例子,大家就都能理解了。

 比如,$_ 设为4,那么1x$_ 就是1111,而这个1111正好和  (^(11+?)\1+$)匹配上了,我们的条件是如果不匹配( !~ )才能print $_ 是素数喔。所以一旦和后边的正则匹配上了,就说明不是素数,也就是说4不是素数。(*^__^*) 嘻嘻……
 
------------------ 原始邮件 ------------------
发送时间: 2011年11月27日(星期天) 下午3:12
收件人: "perlchina"<perlchina@googlegroups.com>;
主题: Re: [PerlChina] 一句很妙的perl�本(通�正�表�式判�素�)
 
算法非常巧妙!将数学问题转化成了文字匹配问题,正好发挥regex长处。

On 2011-11-26 18:22, Shou Ya wrote:
> 在perl1line上看到的:
>
>
> # Check if a number is a prime
> perl -lne '(1x$_) !~ /^1?$|^(11+?)\1+$/ && print "$_ is prime"'
>
>
> 分析了一下,它先把一�字符(��是'1')重�多次,�成一�字串。
>
> 然後�那�正�表�式�行,匹配,那�正��有��部分,前面是匹配'1'或者'',也就是�1和零�度的字串返回真。
>
> 右�的部分(^(11+?)\1+$)�始匹配2以上�度的字串,�且�之�行1+次重�,看是否有匹配上的。在前半部分匹配�用�惰的方法,�束匹配字串的�度是�增��的,事�上�利用�婪法也可以匹配成功,只是可能�大多�素����慢一些的。如果有成功匹配,代表了���度(也就是���字)至少有��因子,分�是匹配到的�度和重�的次�+1(�包括左�的那一部分),那�也就�明���不是素�了。
>
> 我���有想到�正�表�式�有��作用,我一直��正��理文字是相��大,�想到它竟然�可以被用在��上,真出乎意料。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: