[Tutor] pickle problems

Richard D. Moores rdmoores at gmail.com
Mon Aug 13 01:08:18 CEST 2012


On Sun, Aug 12, 2012 at 10:49 AM, eryksun <eryksun at gmail.com> wrote:
> On Sun, Aug 12, 2012 at 10:58 AM, Dave Angel <d at davea.name> wrote:


> Good catch in Kent Johnson's code. Maybe he'll search for his name and
> find this. It should be `r = r // factor`.

The fault was probably mine. Kent wrote this in 2004, in Python 2.x.
When I moved to 3.x I converted the function to 3.x, but missed that
one.
See Kent's Tutor post archived at
<http://mail.python.org/pipermail/tutor/2004-October/032437.html>

I've had an amazing amount of help today. I haven't had time to attend
to all of it yet, but thought I'd get this out. Since posting last
I've found that my script (<pickle_attempt_for_web2.py>) that I
thought was perfect (except for lines 74-78), isn't. Obvious errors in
the dictionary/pickle, such as even prime factors! I'm hoping that
correcting Kent's function will stop the sort of errors I've found.
And I've found an obvious test: The product of an integers prime
factors must equal the integer itself. And of course the factors must
be tested for primacy(?)/prime numberhood(?), which is quickly done
with gmpy2's is_prime().

I just now checked one of the erroneous items that had an even prime factor:

n = 279918016070854658 a random 18-digit integer
the factors of 279,918,016,070,854,658 are [2, 7, 41, 487662048903928]

After correcting Kent's function, I correctly get

> 279918016070854658
the factors of 279,918,016,070,854,658 are [2, 7, 3011, 6640366657277]

>>>487662048903928*2*7*41
279918016070854672
>>>2*7*3011*6640366657277
279918016070854658

>>>is_prime(3011)
True
>>>is_prime(6640366657277)
True

I also just pasted the 3rd version of my script,
pickle_attempt_for_web3.py, at <http://pastebin.com/Ec2ru9jW>.

Dick


More information about the Tutor mailing list