2009/03/29

とある文字のコードポイントが示す数の和は素数か?

以下は、自分のサイトでほったらかしていた2つの内容を
文字コードの和
ひさびさにAppleScriptエディタ使った

をまとめて Ruby 1.9.1 で書き直したものです。
たとえば、「google」、このアルファベット6文字のそれぞれの文字のコードポイント(ruby 1.9.1 での)の和は素数か?という意味です。

# coding: utf-8
# prime_number.rb
=begin
# 100以下の素数検出 
# AppleScript. 2006-06-27 
# http://www.midore.net/daybook/2006/5-9/1151381435.html
set seed to {2, 3, 5, 7}
repeat with targetnum from 2 to 100
  my check(targetnum, seed)
end repeat
return seed
to check(targetnum, seed)
  set checklist to {}
  repeat with i in seed
    set end of checklist to targetnum mod i
  end repeat
  if checklist does not contain 0 then
    set end of seed to targetnum
  end if
end check
# =>
# {2, 3, 5, 7, 13, 11, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
=end
# 2009-03-29.
# 以下は、上記のコードをもとに書き直したもの
def check(x,seed)
  a =[]
  seed.each{|n| a << x % n }
  seed << x unless a.include?(0)
  return seed
end
def sosuu?(n)
  # 大きな数字は計算しない
  return print "error\n" if n > 1000
  seed = [2,3,5,7]
  (2..n).step{|x| check(x, seed) }
  ( seed.include?(n) ) ? "Yes! prime number" : "Not prime number"
end
str, ary = "google", []
str.each_byte{|x| ary << x }
n = ary.inject(0){|sum, n| sum + n }
res = sosuu?(n)
print "number: #{n} is... #{res}\n" if res
# => number: 637 is... Not prime number
# if str = 'g'
# => number: 103 is... Yes! prime number

google の場合は素数でもなんでもなかったのですが、頭文字 g のコードポイントは103で双子素数と呼ばれる数でした!Wow (つーしん) w
http://ja.wikipedia.org/wiki/双子素数
http://ja.wikipedia.org/wiki/103
# 2009-05-16 category 変更

0 件のコメント: