最終更新: 2011-02-12T22:42+0900
Bignumはできれば使いたくない。aが 100未満なので 8桁ずつ。
answer = [0, 0, 0] # sum, a, b
1.upto(99){|a|
digits = "1"
1.upto(99){|b|
sum = 0
carry = 0
0.step(digits.size-1, 8) {|i|
l, r = [0, digits.size-i-8].max, digits.size-i
carry, digits8 = (digits[l...r].to_i * a + carry).divmod(100000000)
digits8 = "00000000#{digits8}"[-8,8]
digits[l...r] = digits8
digits8.each_byte{|byte|
sum += byte - ?0
}
}
if carry != 0
digits8 = carry.to_s
digits = digits8 + digits
digits8.each_byte{|byte|
sum += byte - ?0
}
end
if answer[0] < sum
*answer = sum, a, b
end
}
}
p answer
とかいいながら Bignum。
count = 0
numer, denom = 1, 1
1000.times{
numer, denom = numer + denom + denom, numer + denom
count += 1 if numer.to_s.length != denom.to_s.length
}
p count