"Rick DeNatale" <rick.denatale / gmail.com> writes: > On 9/6/06, Daniel Martin <martin / snowplow.org> wrote: >> I strongly doubt that this method is the most >> efficient way to get to a 9-step number; as a trivial adjustment, the >> number >> >> ("1" * 24 + "9" * 975).to_i >> >> is also a 9-step number. > > I think you lost me on that step. Sorry; I didn't show all my work. irb(main):037:0> 78999.divmod(81) => [975, 24] irb(main):038:0> 81 * 975 + 24 => 78999 >>However, if 78999 is the smallest 8-step >> happy number, the smallest 9-step happy number must have at least >> (78999/81.0).ceil digits. Small wonder that you didn't find one... > > Efficient or not, it would seem that generating large happy numbers by > construction beats the hell out of trying to find them. Probably. I'm reasonably certain that it can be shown that the smallest 9-step number feeds into the smallest 8-step number, but I'm not certain about that. I'm also a bit unclear on how to generate them by construction in an efficient manner to make sure I get them all. (consider that adding a 0 anywhere in a n-step happy number makes another n-step happy number; this adds wrinkles I don't want to think about) However, if I had hit on the idea of generating happy numbers by construction earlier in the quiz, I might have spent Saturday working that out. Oh well. Incidentally, I'm pretty sure now that the smallest 9-step number is: ("3788" + "9" * 973).to_i with 977 digits. Note that: irb(main):020:0> ("3788" + "9"*973).split(//).inject(0){|s,x|s+(x.to_i**2)} => 78999 -- s=%q( Daniel Martin -- martin / snowplow.org puts "s=%q(#{s})",s.map{|i|i}[1] ) puts "s=%q(#{s})",s.map{|i|i}[1]