On Jul 23, 7:11 pm, Mensanator <mensana...@aol.com> wrote: > On Jul 23, 6:02 pm, timro21 <timr...@gmail.com> wrote: > > > I wish to process billions of 100-digit numbers and test if each has > > an integer square root. What's the most efficient way to do this? > > Use gmpy. > > >>> import gmpy > >>> help(gmpy.sqrt) > > Help on built-in function sqrt in module gmpy: > > sqrt(...) > sqrt(x): returns the integer, truncated square root of x, i.e. the > largest y such that x>=y*y. x must be an mpz, or else gets coerced > to one; further, x must be >= 0. > > >>> p = 10**100 > >>> p1 = gmpy.next_prime(p) > >>> p1 > > mpz > (10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000267) > > >>> gmpy.sqrt(p1) > > mpz(100000000000000000000000000000000000000000000000000)
Duh. I completely misread this. I thought you wanted the square root, not IF it had a square root that's an integer. Sorry about that. Try this, instead: >>> gmpy.sqrtrem(p1) (mpz(100000000000000000000000000000000000000000000000000), mpz(267)) It has a non-zero remainder, so it's not an integer square root. -- http://mail.python.org/mailman/listinfo/python-list