sugiです。
In message "[TSfree:212] WC の合い間に 111111"
Fri, 21 Jun 2002 14:36:06 +0900 (JST)
Tsutomu Hiroshima <tsutomu@...> wrote:
> 突然ですが,2 と 5 の倍数以外は,
> 適当な数を掛けると全ての桁に 1 が並びます.
> 3 * 37 = 111
> 7 * 15873 = 111111
> 13 * 8547 = 111111
面白そうですね。
私も Ruby 版で考えてみました。
--^ test1.rb
#! ruby
def f(n)
return 0 if n%2==0 or n%5==0
i=11
i=i*10+1 until i%n==0
return i/n
end
while num=ARGV.shift
num=num.to_i
if f(num)==0
puts "#{num} is Wrong Number"
else
puts "#{num} * #{f(num)} = #{num*f(num)}"
end
end
--$
% ruby test1.rb 3 7 9 12 13 43
3 * 37 = 111
7 * 15873 = 111111
9 * 12345679 = 111111111
12 is Wrong Number
13 * 8547 = 111111
43 * 2583979328165374677 = 111111111111111111111
そういえば、以前、数値を素数の積に分解するスクリプトを作って遊んで
いました。
こんな感じです。
--^ test2.rb
#! ruby
# num を素因数分解して求まる最小の素数を探す。
def sosuu(n)
return n if n ==0 or n ==1
return 2 if n%2==0
return 3 if n%3==0
return 5 if n%5==0
for i in 7..n**0.5
if i%2==0 or i%3==0 or i%5==0
next
elsif n%i==0
return i
break
end
end
return n
end
while num=ARGV.shift
num=num.to_i
a,n=[],num
until sosuu(n)==n
a<<sosuu(n)
n=n/sosuu(n)
end
a<<n
puts %Q|#{num} = #{a.join("*")}|
end
--$
ruby test2.rb 111 1111 11111 111111 1111111111
111 = 3*37
1111 = 11*101
11111 = 41*271
111111 = 3*7*11*13*37
1111111111 = 11*41*271*9091
--
sugi