I'm rather please with the speed of isPrime(). Any credit, of course,
goes to Alex Martelli, who wrote gmpy.
from gmpy import is_prime
def isPrime(n):
"""
Return True if n is prime, False if not prime.
If n not an int or a long, return None.
"""
if not isinstance(n, (int, long)):
return None
x = is_prime(n,100)
if x == 0:
return False
else:
return True
Take a large integer I believe to be prime:
n = 88888888888888888888888888888888888888888888888888888888888888943
In [15]: isPrime(n)
Out[15]: True
In [16]: timeit isPrime(n)
100 loops, best of 3: 20.1 ms per loop
It couldn't be used for cryptography, I suppose, because it's
probability of being accurate is not 1, but 1 - 1/(2**100), or 1 -
7.8886090522101181e-031 .
My question is about whether to test for integerhood. Without that
test, isPrime(3.7) returns true, and isPrime('44') returns False.
I've gone with testing for integerhood, and with returning None when
n fails the test. Thus,
In [3]: print isPrime(3.7)
None
In [4]: print isPrime('44')
None
Advice?
Thanks,
Dick Moores
_______________________________________________
Tutor maillist - Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor