Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 러시아 농민 곱셈을 적용하는 프로그램

<시간/>

네 개의 정수 p, q, r, k가 주어졌다고 가정합니다. 우리는 러시아 농민 곱셈법이라는 방법을 사용하고 (p + q.i)^r =r + s.i의 값을 결정할 것입니다. r mod k 및 s mod k 값을 반환해야 합니다.

따라서 입력이 p =3, q ​​=0, r =8, k =10000과 같으면 출력은 (6561, 0) 3^8 =6561이 됩니다. q =0 r mod k =6561의 값 .

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • r이 0과 같으면
    • 1을 반환
  • 그렇지 않고 r이 1과 같을 때
    • (p mod k, q mod k)를 포함하는 쌍을 반환
  • 그렇지 않고 r mod 2가 0과 같을 때
    • 복귀 풀기((p*p - q*q) mod k, 2*p*q mod k, r/2, k)
  • 그렇지 않으면
    • 쌍(pr, qr) =해결(p, q, r-1, k)
    • ((p * pr - q * qr) mod k, (p * qr + q * pr) mod k)를 포함하는 쌍을 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(p, q, r, k):
   if r == 0:
      return 1
   elif r == 1:
      return (p % k, q % k)
   elif r % 2 == 0:
      return solve((p*p - q*q) % k, 2*p*q % k, r/2, k)
   else:
      (pr, qr) = solve(p, q, r-1, k)
      return ((p * pr - q * qr) % k, (p * qr + q * pr) % k)

print(solve(3, 0, 8, 10000))

입력

3, 0, 8, 10000

출력

(6561, 0)