1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | from time import clock def factorAndSieve(n, verbose = False) : """ Returns all prime factors of n, using trial division while sieving for primes. Returns a list of (possibly repeating) prime factors """ t = clock() ret =[] nn = n while nn % 2 == 0 : # remove 2's first, as 2 is not in sieve nn //= 2 ret += [2] maxFactor = int(nn**0.5) maxI = (maxFactor-3) // 2 maxP = int(maxFactor**0.5) sieve = [True for j in xrange(maxI+1)] i = 0 for p in xrange(3, maxP+1,2) : # we then sieve as far as needed if p > maxP : break i = (p-3) // 2 if sieve[i] : while nn % p == 0 : nn //= p ret += [p] maxFactor = int(nn**0.5) maxI = (maxFactor-3) // 2 maxP = int(maxFactor**0.5) if nn == 1 : break else : i2 = (p*p - 3) // 2 for k in xrange(i2, maxI+1, p) : sieve[k] = False index = i for i in xrange(index, maxI+1) : # and inspect the rest of the sieve if i > maxI : break if sieve[i] : p = 2*i + 3 while nn % p == 0 : nn //= p ret += [p] maxFactor = int(nn**0.5) maxI = (maxFactor-3) // 2 maxP = int(maxFactor**0.5) if nn == 1 : break if nn != 1 : ret += [nn] t = clock() - t if verbose : print "Calculated factors of",n,"in",t,"sec." print "Stopped trial division at",2*i+3,"instead of",int(n**0.5) return ret |
ZnJvbSB0aW1lIGltcG9ydCBjbG9jawoKZGVmIGZhY3RvckFuZFNpZXZlKG4sIHZlcmJvc2UgPSBGYWxzZSkgOgogICAgIiIiCiAgICBSZXR1cm5zIGFsbCBwcmltZSBmYWN0b3JzIG9mIG4sIHVzaW5nIHRyaWFsIGRpdmlzaW9uIHdoaWxlIHNpZXZpbmcKICAgIGZvciBwcmltZXMuIFJldHVybnMgYSBsaXN0IG9mIChwb3NzaWJseSByZXBlYXRpbmcpIHByaW1lIGZhY3RvcnMKICAgICIiIgogICAgdCA9IGNsb2NrKCkKICAgIHJldCA9W10KICAgIG5uID0gbgogICAgd2hpbGUgbm4gJSAyID09IDAgOiAjIHJlbW92ZSAyJ3MgZmlyc3QsIGFzIDIgaXMgbm90IGluIHNpZXZlCiAgICAgICAgbm4gLy89IDIKICAgICAgICByZXQgKz0gWzJdCiAgICBtYXhGYWN0b3IgPSBpbnQobm4qKjAuNSkKICAgIG1heEkgPSAobWF4RmFjdG9yLTMpIC8vIDIKICAgIG1heFAgPSBpbnQobWF4RmFjdG9yKiowLjUpCiAgICBzaWV2ZSA9IFtUcnVlIGZvciBqIGluIHhyYW5nZShtYXhJKzEpXQogICAgaSA9IDAKICAgIGZvciBwIGluIHhyYW5nZSgzLCBtYXhQKzEsMikgOiAjIHdlIHRoZW4gc2lldmUgYXMgZmFyIGFzIG5lZWRlZAogICAgICAgIGlmIHAgPiBtYXhQIDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICBpID0gKHAtMykgLy8gMgogICAgICAgIGlmIHNpZXZlW2ldIDoKICAgICAgICAgICAgd2hpbGUgbm4gJSBwID09IDAgOgogICAgICAgICAgICAgICAgbm4gLy89IHAKICAgICAgICAgICAgICAgIHJldCArPSBbcF0KICAgICAgICAgICAgICAgIG1heEZhY3RvciA9IGludChubioqMC41KQogICAgICAgICAgICAgICAgbWF4SSA9IChtYXhGYWN0b3ItMykgLy8gMgogICAgICAgICAgICAgICAgbWF4UCA9IGludChtYXhGYWN0b3IqKjAuNSkKICAgICAgICAgICAgaWYgbm4gPT0gMSA6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBlbHNlIDoKICAgICAgICAgICAgICAgIGkyID0gKHAqcCAtIDMpIC8vIDIKICAgICAgICAgICAgICAgIGZvciBrIGluIHhyYW5nZShpMiwgbWF4SSsxLCBwKSA6CiAgICAgICAgICAgICAgICAgICAgc2lldmVba10gPSBGYWxzZQogICAgaW5kZXggPSBpCiAgICBmb3IgaSBpbiB4cmFuZ2UoaW5kZXgsIG1heEkrMSkgOiAjIGFuZCBpbnNwZWN0IHRoZSByZXN0IG9mIHRoZSBzaWV2ZQogICAgICAgIGlmIGkgPiBtYXhJIDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICBpZiBzaWV2ZVtpXSA6CiAgICAgICAgICAgIHAgPSAyKmkgKyAzCiAgICAgICAgICAgIHdoaWxlIG5uICUgcCA9PSAwIDoKICAgICAgICAgICAgICAgIG5uIC8vPSBwCiAgICAgICAgICAgICAgICByZXQgKz0gW3BdCiAgICAgICAgICAgICAgICBtYXhGYWN0b3IgPSBpbnQobm4qKjAuNSkKICAgICAgICAgICAgICAgIG1heEkgPSAobWF4RmFjdG9yLTMpIC8vIDIKICAgICAgICAgICAgICAgIG1heFAgPSBpbnQobWF4RmFjdG9yKiowLjUpCiAgICAgICAgICAgIGlmIG5uID09IDEgOgogICAgICAgICAgICAgICAgYnJlYWsKICAgIGlmIG5uICE9IDEgOgogICAgICAgIHJldCArPSBbbm5dCiAgICB0ID0gY2xvY2soKSAtIHQKICAgIGlmIHZlcmJvc2UgOgogICAgICAgIHByaW50ICJDYWxjdWxhdGVkIGZhY3RvcnMgb2YiLG4sImluIix0LCJzZWMuIgogICAgICAgIHByaW50ICJTdG9wcGVkIHRyaWFsIGRpdmlzaW9uIGF0IiwyKmkrMywiaW5zdGVhZCBvZiIsaW50KG4qKjAuNSkKICAgIHJldHVybiByZXQK
-
upload with new input
-
result: Success time: 0.03s memory: 6688 kB returned value: 0
factor(10**15+37,True)
-
result: Success time: 0.03s memory: 6688 kB returned value: 0



