저는 Pari/GP 라이브러리와 언어가 APR-CL을 사용하여 소수성을 증명한다는 사실을 발견했습니다. 실제로이 크기 범위의 숫자에 대해 선호되는 알고리즘입니다. GP는 원자 프로세서에서 20 초 이내에 291 자리의 후보 프라임을 증명합니다. 이는 내 요구에 충분하며, c 유형을 사용하여 액세스 할 수있는 라이브러리가 제공됩니다.
import ctypes
def pari_isprime(self, n):
try: pari = ctypes.cdll.LoadLibrary("libpari.so")
except OSError:
print "pari_isprime: couldn't load libpari!"
exit()
int(n)
pari.pari_init(4000000, 2)
ret = bool(pari.isprime(pari.gp_read_str(str(n))))
pari.pari_close()
return ret
또한 instant
모듈을 사용할 수도 있습니다.
상기
from instant import inline
runpari_code = """
PyObject* runpari(PyObject *args) {
pari_init(40000000, 2);
char *pari_code;
char *outstr;
if (!PyArg_Parse(args, "s", &pari_code)) { return NULL; } // instant uses old-style args; for a module, use PyArg_ParseTuple
outstr = GENtostr(gp_read_str(pari_code));
pari_close();
return Py_BuildValue("s", outstr);
}
"""
runpari = inline(runpari_code, system_headers=['pari/pari.h'], libraries=['pari'])
또한 적절한 CPython의 확장을 기초로 사용될 수있다 : 여기 PARI의 파서를 통해 문자열을 실행하고 결과를 문자열로 반환하는 간단한 C 함수이다.
읽은 ECPP에 대한 설명이 명확하지 않거나, 상세하거나, 완전하지 않거나 사전 지식이 너무 많습니다. "선행 지식"에 대한 귀하의 표준이 어쩌면 될지 모릅니다. 지금까지 시도한 것에 대한 배경 지식을 제공하십시오. –
파이썬 라이브러리가 필요 하겠지만 Java 메소드를 체크 아웃하는 것을 고려해 보았습니다. http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html#isProbablePrime(int) ? 나는 그들이 Miller-Rabin 알고리즘을 구현한다고 생각하며, 최대 500 자리 숫자에 대한 나의 개인적인 경험으로부터는 매우 정확합니다. –
사실, 저는 이미 파이썬에서 구현 된 Miller-Rabin 알고리즘을 가지고 있습니다 - 쉽고 편하고 놀라 울 정도로 빠릅니다. 그러나 나는 조금 더 확신을 원한다. (또는 당신이 어떻게 보느냐에 따라 무한히 많다.) – senderle