파이썬용 소수 판정 함수
글쓴이: lifthrasiir / 작성시간: 월, 2005/03/28 - 3:22오전
Strong Probable Prime Test를 사용한 간단한 소수 판정 함수입니다. 속도도 그럭 저럭 빠른 편이어서 애용(?)하고 있습니다.
code snippet에도 올라 와 있습니다. 이 쪽에서는 간단한 테스트들도 볼 수 있습니다.
def issprp(n, a):
"""Returns True if n is a-SPRP, False otherwise."""
if n < 2 or n & 1 == 0: return False
d = n - 1
while d & 1 == 0:
d >>= 1
if pow(a, d, n) + 1 == n: return True
return pow(a, d, n) == 1
def isprime(n):
"""Returns True if n < 341,550,071,728,321 is prime, False otherwise."""
if n < 2: return False
elif n < 4: return True
elif not issprp(n, 2): return False
elif n < 2047: return True
elif not issprp(n, 3): return False
elif n < 1373653: return True
elif not issprp(n, 5): return False
elif n < 25326001: return True
elif n == 3215031751 or not issprp(n, 7): return False
elif n < 118670087467: return True
elif not issprp(n, 11): return False
elif n < 2152302898747: return True
elif not issprp(n, 13): return False
elif n < 3474749660383: return True
elif not issprp(n, 17): return False
elif n < 341550071728321: return True
else: raise ValueError, "cannot test primality of n >= 341,550,071,728,321."
- 토끼군
Forums:


댓글 달기