正規表現で素数判定


使


http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/


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

使n"1" * n調"1" * n n4 "1111" 14

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?$/

^?01$使"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"1138


n = 9 の場合

"111111111"


/^11+?/

"11"

7"1111111"
/(11)+$/

711


/^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