르장드르의 기호를 소개하면서, 소수에 대해 모듈로를 사용하여 제곱근이 있는지를 빠르게 판별하는 방법을 알아보았습니다. 더 나아가서, 이러한 제곱근을 효율적으로 계산하기 위한 알고리즘도 있습니다. 실제로 가장 좋은 알고리즘은 Tonelli-Shanks라고 불리며, 이는 19세기에 이탈리아인에 의해 처음으로 기술되었으며, 1970년대에 Daniel Shanks에 의해 독립적으로 재발견되었습니다.
2가 아닌 모든 소수는 p ≡ 1 mod 4 또는 p ≡ 3 mod 4 형태입니다. 왜냐하면 모든 홀수는 이러한 합동식을 따르기 때문입니다. 이전의 도전에서 암시한 대로, p ≡ 3 mod 4 경우에는 페르마의 소정리로부터 직접적으로 계산 가능한 매우 간단한 공식을 얻을 수 있습니다. 이에 반해 p ≡ 1 mod 4경우, 보다 일반적인 알고리즘이 필요합니다.
r² ≡ a mod p 형태의 합동식에서, Tonelli-Shanks는 r을 계산합니다.
✍Tonelli-Shanks는 합성 (소수가 아닌) 모듈 연산에는 작동하지 않습니다. 합성 수를 모듈 연산로하여 제곱근을 찾는 것은 정수 인수 분해와 계산적으로 동등한 문제입니다. 즉, 어려운 문제입니다.
이 알고리즘의 주요 사용 사례는 타원 곡선 좌표를 찾는 것입니다. 그 동작은 다소 복잡하기 때문에 세부 사항을 논의하지는 않겠지만, 구현은 쉽게 찾을 수 있으며 Sage에는 내장된 기능이 있습니다.
a 모듈러의 2048비트 소수 p에 대한 제곱근을 찾으세요. 두 개의 해 중에서 작은 값을 답으로 제출하세요.