Is my implementation of happy number OK

Dave Angel davea at
Thu Apr 30 23:31:24 CEST 2015

On 04/30/2015 04:35 PM, Cecil Westerhof wrote:
> Op Thursday 30 Apr 2015 20:53 CEST schreef Dave Angel:
>> Finally, I did some testing on Jon Ribben's version. His was
>> substantially faster for smaller sets, and about the same for 10*7.
>> So it's likely it'll be slower than yours and mine for 10**8. But
>> the real reason I didn't like it was it produced a much larger set
>> of happy_numbers, which could clog memory a lot sooner. For 10**7
>> items, I had 3250 happy members, and 19630 unhappy. And Jon had
>> 1418854 happy members.
> My version has 1625 and 9814. I do not understand the difference.

My error.  I had also written a version of the function that stored 
strings instead of ints, and the counts of 3250/19630 was for sets that 
had BOTH.

An exercise for the reader.  Notice that in my brute force algorithm I 
use no global sets.  But I do use an internal list, which is apparently 
unbounded.  So it's feasible to run out of memory.  The challenge is to 
write a similar function that uses no lists, sets, or dicts, just an 
algorithm that detects for an arbitrary sized number whether it's happy 
or not.  (It may not be very quick, but that's yet to be decided.  I'm 
already surprised that the present brute force function  davea1() only 
takes about twice as long as the fancy global caching schemes.


More information about the Python-list mailing list