Velocity Reviews > Ruby > [QUIZ] Happy Numbers (#93)

[QUIZ] Happy Numbers (#93)

Matthew Moss
Guest
Posts: n/a

 09-01-2006
> Now that you have this program, what is the largest happy number you can find?

(10 ** N) where N is anything. You name N, I'll say N+1.

Morton Goldberg
Guest
Posts: n/a

 09-01-2006
On Sep 1, 2006, at 9:01 AM, Ruby Quiz wrote:

> If a number is not happy than it is obviously unhappy. Now that you
> have this
> program, what is the largest happy number you can find?

Clearly, there is no largest happy number. Any number of the form
10**n in base b is b-relative happy (with rank 1). I feel this makes
the stated question an ill-conditioned one.

> What is the happiest number between 1 and 1,000,000. I define the
> happiest number
> as the smallest number that finds the most other happy numbers with
> it, i.e. 7
> found four other numbers (49, 97, 130, and 10) making it a rank 4
> in happiness.

This seems a better question to pursue than the first. Other
questions one might explore: how does rank vary as the numbers
increase? Does maximum rank grow as happy numbers get bigger? Is
there a pattern? Are there interesting statistics?

Regards, Morton

Chris Gehlker
Guest
Posts: n/a

 09-01-2006

On Sep 1, 2006, at 7:58 AM, Shane Emmons wrote:

> Sorry, I should have clarified that a Happy number results in 1,
> and an
> Unhappy number results in an infinite loop.

That's not quite what the cited article says. it says that happy
numbers result in an infinite loop on 1 and unhappy numbers result in
an infinite loop on the series: 4, 16, 37, 58, 89, 145, 42, 20,
4, ... and that there are no other possibilities.
>
> On 9/1/06, William Crawford <(E-Mail Removed)> wrote:
>>
>> James Gray wrote:
>> > On Sep 1, 2006, at 8:41 AM, Peter Hickman wrote:
>> >
>> >> Doesn't this mean that all numbers are happy?
>> >
>> > Here's some further reading for those still confused:
>> >
>> > http://mathworld.wolfram.com/HappyNumber.html
>> >
>> > James Edward Gray II

>>
>> Wow. Lots of strategy on that page. Almost like cheating
>>
>> On a side note... Did anyone NOT calculate 3 by hand? Heh.
>>
>> --
>> Posted via http://www.ruby-forum.com/.
>>
>>

>
>
> --
> --- Shane Emmons <(E-Mail Removed)>

--
Vegetarians eat Vegetables, Humanitarians frighten me

Mike Stok
Guest
Posts: n/a

 09-01-2006

On 1-Sep-06, at 11:00 AM, knaveofdiamonds wrote:

> One note of advice - the operator to use is actually ** not ^ as might
> be expected:
>
> irb> 7 ^ 2 # Gives 5
> irb> 7 ** 49 # Gives 49

I hope that's not cut & pasted! 7 ** 49 is a little bigger:

ratdog:~ mike\$ irb --prompt simple
>> 7 ^ 2

=> 5
>> 7 ** 2

=> 49
>> 7 ** 49

=> 256923577521058878088611477224235621321607

Mike

--

Mike Stok <(E-Mail Removed)>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.

Morton Goldberg
Guest
Posts: n/a

 09-01-2006
On Sep 1, 2006, at 9:01 AM, Ruby Quiz wrote:

> If a number is not happy than it is obviously unhappy. Now that you
> have this
> program, what is the largest happy number you can find?

Clearly, there is no largest happy number. Any number of the form
10**n in base b is b-relative happy (with rank 1). I feel this makes
the stated question an ill-conditioned one.

> What is the happiest number between 1 and 1,000,000. I define the
> happiest number
> as the smallest number that finds the most other happy numbers with
> it, i.e. 7
> found four other numbers (49, 97, 130, and 10) making it a rank 4
> in happiness.

This seems a better question to pursue than the first. Other
questions one might explore: how does rank vary as the numbers
increase? Does maximum rank grow as happy numbers get bigger? Is
there a pattern? Are there interesting statistics?

Regards, Morton

Roland Swingler
Guest
Posts: n/a

 09-01-2006
Sorry, should have been 7 ** 2

Out of interest, any mathmaticians care to enlighten me as to whether
happy numbers are in any way "useful"?

Cheers,
Roland

James Edward Gray II
Guest
Posts: n/a

 09-01-2006
On Sep 1, 2006, at 10:40 AM, Paul Lutus wrote:

> knaveofdiamonds wrote:
>
>> One note of advice - the operator to use is actually ** not ^ as
>> might
>> be expected:
>>
>> irb> 7 ^ 2 # Gives 5
>> irb> 7 ** 49 # Gives 49

>
> I think you meant 7 ** 2 = 49, whereas
> 7 ** 49 = 256923577521058878088611477224235621321607
>
> But, since these are integers, we are better off computing n * n,
> not n ** 2. There's really no point (in time efficiency) to explicitly
> raising n to a power p unless n is not an integer or p is
> relatively large.

#!/usr/bin/env ruby -w

require "benchmark"

TESTS = 1_000_000
Benchmark.bmbm(10) do |results|
results.report("Exponent:") { TESTS.times { |n| n ** 2 } }
results.report("Multiply:") { TESTS.times { |n| n * n } }
end
# >> Rehearsal ---------------------------------------------
# >> Exponent: 1.370000 0.000000 1.370000 ( 1.37235
# >> Multiply: 1.730000 0.010000 1.740000 ( 1.747647)
# >> ------------------------------------ total: 3.110000sec
# >>
# >> user system total real
# >> Exponent: 1.440000 0.000000 1.440000 ( 1.452441)
# >> Multiply: 1.760000 0.010000 1.770000 ( 1.77598

James Edward Gray II

Phrogz
Guest
Posts: n/a

 09-01-2006
Interestingly, there doesn't seem to be a pattern as to the number of
happy numbers in a given range as the base changes:

(My results...might be wrong.
How many Happy numbers between 1..10000?
Base 2: 10000 happy numbers.
Base 3: 1988 happy numbers.
Base 4: 10000 happy numbers.
Base 5: 2571 happy numbers.
Base 6: 645 happy numbers.
Base 7: 162 happy numbers.
Base 8: 549 happy numbers.
Base 9: 627 happy numbers.
Base 10: 1442 happy numbers.
Base 11: 196 happy numbers.
Base 12: 24 happy numbers.
Base 13: 582 happy numbers.
Base 14: 93 happy numbers.
Base 15: 164 happy numbers.
Base 16: 2585 happy numbers.
Base 17: 253 happy numbers.
Base 18: 4154 happy numbers.
Base 19: 3647 happy numbers.
Base 20: 1616 happy numbers.
Base 21: 45 happy numbers.
Base 22: 17 happy numbers.
Base 23: 19 happy numbers.
Base 24: 9 happy numbers.
Base 25: 519 happy numbers.
Base 26: 377 happy numbers.
Base 27: 279 happy numbers.
Base 28: 6 happy numbers.
Base 29: 1730 happy numbers.
Base 30: 5266 happy numbers.
Base 31: 11 happy numbers.
Base 32: 11 happy numbers.
Base 33: 84 happy numbers.
Base 34: 192 happy numbers.
Base 35: 77 happy numbers.
Base 36: 50 happy numbers.

Phrogz
Guest
Posts: n/a

 09-01-2006
Although others are sure to have better results, I thought I'd post
mine (no spoilers). I did it a simple way first, and then another more
sophisticated way second. Nice speed improvement.

The below tests 1000 numbers for happiness in 33 different bases.

range = 1..1000
require 'Benchmark'
Benchmark.bm(20){ |r|
r.report( "Technique 1" ){
3.upto(36){ |base|
range.select{ |i|
# find out if 'i' is a happy number in the supplied base
}
}
}

r.report( "Technique 2" ){
3.upto(36){ |base|
range.select{ |i|
# find out if 'i' is a happy number in the supplied base
}
}
}
}

user system total real
Technique 1 19.282000 0.031000 19.313000 ( 19.359000)
Technique 2 2.140000 0.000000 2.140000 ( 2.156000)

Matthew Moss
Guest
Posts: n/a

 09-01-2006
> Out of interest, any mathmaticians care to enlighten me as to whether
> happy numbers are in any way "useful"?

As has been said, "real mathematicians" shudder that their work might be useful.

In actuality, sometimes things like this aren't, and sometimes they
are years later. Prime numbers never had much use until recent years,
where they have become very important for encryption.

Maybe happy numbers have a use... just no one knows it yet!