온라인에서 찾은 알고리즘을 사용하여 두 개의 큰 소수를 생성하고 약간 변경했습니다. Python OverflowError : 'long'을 인덱스에 맞출 수 없습니다. = 크기의 정수
나는 5 행에이 오류를 얻을 :Python OverflowError: cannot fit 'long' into an index=sized integer
내 코드 :
import math
def atkin(end):
if end < 2: return []
lng = ((end/2)-1+end%2)
**sieve = [True]*(lng+1)**
for i in range(int(math.sqrt(end)) >> 1):
if not sieve[i]: continue
for j in range((i*(i + 3) << 1) + 3, lng, (i << 1) + 3):
sieve[j] = False
primes = [2]
primes.extend([(i << 1) + 3 for i in range(lng) if sieve[i]])
return primes
가 어떻게 내 오류를 해결할 수 ?
큰 소수를 생성하는 더 좋은 방법을 알고 있다면 도움이 될 것입니다.
작은 숫자로이 코드를 사용해 보셨습니까? 큰 숫자를 사용하려면 http://gmplib.org/ library를 시도해야합니다. 이 라이브러리를위한 파이썬 래퍼가 있으며 잘 작동합니다. – Elalfer
그래, 코드가 작은 숫자에 잘 작동합니다. 나는 1과 100 사이의 소수를 검사했는데 정확했다. 링크 주셔서 감사합니다, 나는 그것을 체크 아웃합니다. – Rell3oT
여기에 설명 된 알고리즘을 사용하여 더 큰 소수에 빨리 도달 할 수있는 여러 가지 방법이 있습니다. http://stackoverflow.com/questions/2897297/speed-up-bitstring-bit-operations-in-python –