On Mar 5, 3:34 pm, Mensanator <[EMAIL PROTECTED]> wrote: > On Mar 5, 9:29 am, Nanjundi <[EMAIL PROTECTED]> wrote: > > > On Mar 4, 3:13 pm, Mensanator <[EMAIL PROTECTED]> wrote: > > > > On Mar 4, 12:32 pm, Nanjundi <[EMAIL PROTECTED]> wrote: > > > > > Does seeding ( random.seed ) random with time fix this? It should. > > > > I suppose that depends on how long it takes factorint() to > > > process a number. If the seed is reset before the next clock > > > tick, you will get the same random numbers as the previous > > > iteration. > > > Alright, then make it constant and don't worry about the clock tick. > > Reseeding with a constant always sets the sequence to the same > starting > point. >
Right, not a good idea. > > > >>> for i in xrange(10): > > > ... f1 = random.choice(f) > > ... print f1, > > ... f2 = random.choice(f) > > ... print f2, > > ... C = f1*f2 > > ... ff = None > > ... ff = sympy.factorint(C) > > ... print ff > > ... random.seed(i) > > ... > > 5573 5171 [(5171, 1), (5573, 1)] > > 8537 7673 [(7673, 1), (8537, 1)] > > 2063 8573 [(2063, 1), (8573, 1)] > > 9551 9473 [(9473, 1), (9551, 1)] > > 2909 5659 [(2909, 1), (5659, 1)] > > 2897 1789 [(1789, 1), (2897, 1)] > > 6361 7541 [(6361, 1), (7541, 1)] > > 8017 8293 [(8017, 1), (8293, 1)] > > 3671 2207 [(2207, 1), (3671, 1)] > > 2803 9629 [(2803, 1), (9629, 1)] > > > > Frankly, I don't understand why factorint() reseeds at all. > > > Read the doc: > > * The rho algorithm is a Monte Carlo method whose outcome can be > > affected by changing the random seed value. * > > But that doesn't give it the right to mess with the state > of the random number generator _I'm_ using. Had I actually > known what was happening, I could have saved the state of > my random number generator s=random.getstate() and then restored > it after calling factorint(), random.setstate(s). > > import sympy # with RK's patch removed > import time > import random > > f = [i for i in sympy.primerange(1000,10000)] > > for i in xrange(10): > f1 = random.choice(f) > print f1, > f2 = random.choice(f) > print f2, > C = f1*f2 > ff = None > rs = random.getstate() > ff = sympy.factorint(C) > random.setstate(rs) > print ff > > 5669 3863 [(3863, 1), (5669, 1)] > 1973 5431 [(1973, 1), (5431, 1)] > 7577 6089 [(6089, 1), (7577, 1)] > 8761 4957 [(4957, 1), (8761, 1)] > 4153 2719 [(2719, 1), (4153, 1)] > 4999 5669 [(4999, 1), (5669, 1)] > 8863 5417 [(5417, 1), (8863, 1)] > 7151 7951 [(7151, 1), (7951, 1)] > 7867 9887 [(7867, 1), (9887, 1)] > 9283 5227 [(5227, 1), (9283, 1)] > > Of course, this is new as of Python 2.4, so if factorint() > tried to save & restore state, sympy wouldn't work on Python > 2.3 or earlier. > > If I'm reading RK's patch correctly, he doesn't reseed the > random number generator, he creates a new random object that > maintains it's own state that can be freely seeded to any > value without disturbing the state of my random number generator. > > > > > > Doesn't Random automatically initialize the seed? > > > Doesn't constantly reseeding degrade the performance of the > > > random number generator? With Robert Kern's patch, the reseeding > > > is no longer a constant, fixing the immediate symptom. > > > Does it matter? > > I was wrong. It is a constant, just not 1234. If that's what > factorint() needs, fine. As long as it maintains a seperate state > than the one I'm using. > > > The factorint reseeds using a constant seed (1234). > > Not now it doesn't: :) > > @@ -92,8 +92,8 @@ def pollard_pm1(n, B=10, seed=1234): > > """ > from math import log > - random.seed(seed + B) > - a = random.randint(2, n-1) > + prng = random.Random(seed + B) > + a = prng.randint(2, n-1) > for p in sieve.primerange(2, B): > e = int(log(B, p)) > a = pow(a, p**e, n) > > > > > > But what if _I_ wanted to make a repeatable sequence for test > > > purposes? Wouldn't factorint() destroy my attempt by reseeding > > > on every call? > > > Repeatable sequence? save it and reuse! > > As part of my resolution to tone down my attitude, > I won't even reply to that. > Thanks. > > Think about "What if"s doesn't get any work done. > > ? nevermind. > > > > > -N -- http://mail.python.org/mailman/listinfo/python-list