파이썬에서 가능한 한 효율적으로 1000s 자리 정수를 곱해야합니다. 번호는 파일에서 읽습니다.Schönhage-Strassen 알고리즘 (거대한 정수 곱셈) 이해
정수 곱셈 알고리즘을 구현하기 위해 노력하고 있는데, 특히 그 정의와 수학, 특히 고속 푸리에 변환을 이해해야합니다.
실용적인 예 또는 의사 코드와 같은이 알고리즘을 이해하면 도움이됩니다.
파이썬에서 가능한 한 효율적으로 1000s 자리 정수를 곱해야합니다. 번호는 파일에서 읽습니다.Schönhage-Strassen 알고리즘 (거대한 정수 곱셈) 이해
정수 곱셈 알고리즘을 구현하기 위해 노력하고 있는데, 특히 그 정의와 수학, 특히 고속 푸리에 변환을 이해해야합니다.
실용적인 예 또는 의사 코드와 같은이 알고리즘을 이해하면 도움이됩니다.
Knuth의 TAOCP의 4.3.3 절은이를 설명하고이 장에서 사용할 수있는 다른 장의 일부 FFT 의사 코드도 가지고 있습니다.
바퀴를 재발 명하지 마십시오. GMP는이 알고리즘을 고성능으로 구현할 수 있으며 순수 파이썬으로 작성된 알고리즘은 파이썬이 해석 된 언어이기 때문에 최소 100 배 느려질 것입니다. gmpy을 사용하여 Python 응용 프로그램에서 GMP를 호출하십시오. 또한 어떤 응용 프로그램에서 그렇게 많은 수의 곱셈이 필요한지 궁금합니다. 문제를 처리하는 더 간단한 방법이있을 수 있습니다.
다른 답변에서 언급 한 것처럼 "몇 1000 자릿수"는 Schönhage-Strassen을 정당화하기에 충분히 길지 않습니다 (10 진수가 적어도 10000 자 이상이어야합니다). Toom-3과 같은 Toom-Cook의 일부 변형이 일반적으로이 범위에서 사용됩니다. 다시 말하지만, 파이썬에서 직접 작성하지 마십시오. GMP의 구현은 매우 신중하게 최적화되었습니다.
예를 들어, PyopenCL은 어떻습니까? – user2284570
하나의 매우 중요한 힌트 : 꼭 필요한 경우가 아니면 자신의 FFT를 구현하지 마십시오. 파이썬에서 사용할 수 있다면 계산을 위해 FFTW를 사용하십시오. 너 자신을 구현하는 꿈을 꾸는 것이 무엇이든 훨씬 능가 할 것입니다. 간단한 FFT가 그리 어렵지는 않지만, 어려운 부분은 빨리 처리하고 있습니다. 특히 계산중인 숫자가 2의 거듭 제곱의 힘이 아니라면 더욱 그렇습니다. – LiKao
@LiKao : Schönhage-Strassen은 일반적으로 임의의 크기의 정수와 Number Theoretic Transform의 고정 크기 벡터를 사용하여 구현되지만 FFTW와 같은 패키지로 구현되는 FFT는 부동 소수점 및 고정 크기 요소를 사용하므로 실제로 매우 도움이됩니다. –