æ£è¦è¡¨ç¾ã§ç´ æ°å¤å®
追è¨ï¼ããããªè¨ã£ã¦ãã®æ£è¦è¡¨ç¾ã¯ãã¿ãªã®ã§ï¼å®éã«ç´ æ°å¤å®ãè¡ãããå ´åã¯ï¼ãã£ã¨å¥ãªè³¢ãã¢ã«ã´ãªãºã ã使ã£ãã»ããè¯ãã§ã
æ£è¦è¡¨ç¾ã§ç´ æ°ãå¤å®ã§ããã¨ããè¨äºãè¦ãã®ã§è©¦ãã¦ã¿ãï¼
http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/
ãã®è¨äºã«ããã¨
/^1?$|^(11+?)\1+$/
ã¨ããæ£è¦è¡¨ç¾ã使ãã¨ï¼ç´ æ°å¤å®ãåºæ¥ããããï¼ããæ´æ° n ãç´ æ°ãã©ããå¤å®ãããå ´åã¯ï¼"1" * nã¨ããæååããã®æ£è¦è¡¨ç¾ã«ããããããã©ããã調ã¹ãã°ããï¼ãããããã°éç´ æ°ï¼ãããããªããã°ç´ æ°ã¨ãªãï¼ãã ãï¼"1" * n ã¯ï¼ä¾ãã°ï¼n ã 4 ãªãã° "1111" 㨠1 ã 4 åé£ç¶ãã¦ç¶ãæååã¨ãªãï¼
Rubyã§æ¸ããç´ æ°å¤å®ããã°ã©ã ã¯ãããªæãã«ãªãããã ï¼
def is_prime(n) ("1" * n) !~ /^1?$|^(11+?)\1+$/ end
å è¨äºã®çä¼¼ããã¦ï¼irbã§è©¦ãã¦ã¿ãï¼
$ irb >> def is_prime(n) >> ("1" * n) !~ /^1?$|^(11+?)\1+$/ >> end >> nil >> is_prime(10) >> false >> is_prime(7) >> true >> is_prime(9) >> false >> is_prime(97) >> true
ãããï¼æ¬å½ã«å¤å®åºæ¥ã¦ããï¼ã«ããã«ã¯ä¿¡ãé£ãå æ¯ã§ããï¼ãã®æ£è¦è¡¨ç¾ãå解ãã¦ã¿ã¦ã¿ãï¼
ãã®æ£è¦è¡¨ç¾ãè¦ã¦ã¿ãã¨ï¼
/^1?$|^(11+?)\1+$/
ã¨ãªã£ã¦ãããï¼ããã¯ï¼
/^1?$/
ã¨
/^(11+?)\1+$/
ã®2ã¤ã«åãã¦èãããã¨ãåºæ¥ãï¼ãã®ã©ã¡ããã«ãããããã°ï¼éç´ æ°ã¨ããäºã«ãªãã®ã§ï¼é ã«è¦ã¦ããï¼
^1?$
次ã®æ£è¦è¡¨ç¾
/^1?$/
ã§ãããï¼^ã¯è¡é ãï¼?ã¯ç´åã®æ£è¦è¡¨ç¾ã®0åã1åã®ç¹°ãè¿ããï¼$ã¯è¡æ«ã表ãæ£è¦è¡¨ç¾ã§ããï¼ããã¯ãã使ãã·ã³ã¿ãã¯ã¹ãªã®ã§ç¹ã«åé¡ãªãã¨æãï¼ãã®æ£è¦è¡¨ç¾ããããããã®ã¯ï¼"1"ãï¼ããæåã®""ã¨ãªãï¼ããªãã¡ï¼1 ã éæ´æ°å¤ã®å ´åã¯éç´ æ°ã¨å¤å®ããããã«ä½¿ããããã¿ã¼ã³ã§ãããã¨ãåããï¼
^(11+?)\1+$
åé¡ã¯æ¬¡ã®æ£è¦è¡¨ç¾ã¨ãªãï¼
/^(11+?)\1+$/
^ï¼$ã¯ï¼ãã¯ãè¡é ã¨è¡æ«ã表ãã¦ããç¹ã«åé¡ãªãï¼ç¹ã«éè¦ãªã®ã¯ \1 ã§ãããï¼ãã®ã¾ãã«ï¼
/^11+?/
ã«ã¤ãã¦èãã¦ã¿ãï¼()ã¯å¤ãã¦ãããï¼ãã㯠\1 ã¨é¢ä¿ããã®ã§ããããã¨ã§èããï¼
+? ã«ã¤ãã¦ã ãï¼ããã¯ï¼ç´åã®æ£è¦è¡¨ç¾ã®1å以ä¸ã®ç¹°ãè¿ãã表ãï¼ãã ãï¼ãããã³ã°ã¯æçä¸è´ã§è¡ãããï¼ã¤ã¾ãï¼"11110" 㨠è¨ãæååããã£ãå ´åï¼ãããããã®ã¯å é 2æåã®"11"ã¨ãªãï¼
ã¡ãªã¿ã«ï¼+ ã ã¨æé·ä¸è´ã¨ãªãï¼"11110" ã¨ããæååã®å ´åã¯ï¼"1111"ãããããããã¨ã«ãªãï¼
次ã¯ãããã "/^(11+?)\1+$/" ã§ããï¼\1 ã¯å¾æ¹åç
§ã«ä½¿ããããããï¼ä½¿ãæ¹ã¯ï¼Rubyã®æ£è¦è¡¨ç¾ããã¥ã¢ã«ãè¦ãã¨ä¸çºã§ãããï¼
http://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html#a.b8.e5.ca.fd.bb.b2.be.c8
re = /(foo|bar|baz)\1/ p re =~ 'foofoo' # => 0 p re =~ 'barbar' # => 0 p re =~ 'bazbaz' # => 0 p re =~ 'foobar' # => nil
ã¤ã¾ãï¼\1 㯠1 çªç®ã®æ¬å¼§ ( ) ã«ãããããæååã«ããããããã¨ã«ãªãï¼
ããã¾ã§æ¥ã¦ããããè¬ã解ããï¼ã¤ã¾ãããã¯ï¼2 ãã n - 1 ã¾ã§é ã«å²ãç®ãã¦ããï¼å²ãåãããéç´ æ°ï¼å²ãåããªãã£ããç´ æ°ã¨å¤å®ãã¦ããã®ã¨åããã¨ã ã£ãã®ã ï¼
ä¾
n = 8 ã®å ´åï¼
ãããç¨ã®æååã¯"11111111"ã¨ãªãï¼
ã¾ãã¯ããã«ï¼
/^11+?/
ãæ¤æ»ãããï¼æçä¸è´ãªã®ã§ï¼ä¸è´ããæååã¯ï¼å é ã®"11"ã¨ãªãï¼
次ã«ï¼æ®ãã®å¾ã6æåã®"111111"ã
/(11)+$/
ã¨ãããã¿ã¼ã³ã¨ç
§åãããï¼"111111"ã¯ï¼11ã3åé£ç¶ãããã¨ã§æ¸ããã¨ãåºæ¥ããããã¿ã¼ã³ãããã«æåãããã¨ã«ãªãï¼å¾ã£ã¦ï¼8ã¯éç´ æ°ã¨ãªãï¼å¶æ°ã®å ´åã¯ï¼å
¨ã¦ããã§å¦çãçµäºãã¦éç´ æ°ã¨å¤å®ãããï¼
n = 9 ã®å ´å
ãããç¨ã®æååã¯"111111111"ã¨ãªãï¼
ã¾ãã¯ããã«ï¼
/^11+?/
ãæ¤æ»ãããï¼æçä¸è´ãªã®ã§ï¼ä¸è´ããæååã¯ï¼å é ã®"11"ã¨ãªãï¼
åããï¼æ®ãã®å¾ã7æåã®"1111111"ã
/(11)+$/
ã¨ãããã¿ã¼ã³ã¨ç §åãããï¼ããããªããï¼7æåã§ããããï¼11ã®ç¹°ãè¿ãã§æ¸ããã¨ãåºæ¥ãï¼ç §åã¯å¤±æããï¼
ããã§éè¦ãªã®ã¯ï¼
/^11+?/
ãä¸è´ããã®ã¯ï¼"11"ã®ã¿ã§ã¯ãªãï¼"111"ãï¼"1111"ããã以ä¸ã®ç¹°ãè¿ããå«ã¾ããã¨ãããã¨ã§ããï¼å¾ã£ã¦ï¼ãã®ãã¿ã¼ã³ã¯å é 3æåã®"111"ã¨ä¸è´ãï¼æ®ãã®å¾ã6æåã®"111111"ã
/(111)+$/
ã¨ãããã¿ã¼ã³ã¨ç
§åãããï¼ããã¨ï¼ããã¯ç
§åã«æåããããï¼9ã¯éç´ æ°ã¨å¤å®ãããï¼
n = 7 ã®å ´å
ããã¾ã§æ¥ããåããã¨ããï¼n = 7ï¼"1111111"ã®å ´åã¯ï¼ã¾ãã¯ããã«
/^11+?/
ãæ¤æ»ããã¦ï¼å é 2æåã®"11"ããããããï¼ãã®ããï¼æ®ãã®å¾ã 5 æåã® "11111"ã¨ï¼
/(11)+$/
ãç
§åããããï¼ããã¯å¤±æããï¼
ã¨ããã§
/^11+?/
ã¨ããæ£è¦è¡¨ç¾ã¯ï¼å é ã®"111", ã¨ããããããããï¼ä»åº¦ã¯å¾ãã®æ®ã 4 æåã®"1111"ã¨
/(111)+$/
ãç §åããããã¨ã«ãªãï¼ããããªããï¼ãããã¾ã失æããï¼
ãã¨ã¯ããã®ç¹°ãè¿ãã§ãããï¼7 ã¯ç´ æ°ã§ããã®ã§ï¼æ°¸é ã«ãã¿ã¼ã³ã¨ããããããã¨ã¯ãªãï¼ç¡äºã«ç´ æ°ã¨å¤å®ãããï¼
æ£è¦è¡¨ç¾ã§ã¨ã©ãã¹ããã¹ã®ãµããã¯ãããã«ç¡çããª