Crypto

GCD 에 대해서

Kon4 2023. 2. 18. 19:13

GCD

Euclidean algorithm

일명: 유클리드 호제법

결론: 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지 를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.

  • 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘
78696 = 19332×4 + 1368
    19332 = 1368×14 + 180
     1368 = 180×7 + 108
      180 = 108×1 + 72
      108 = 72×1 + 36
       72 = 36×2 + 0
#;; 최대 공약수 = 36
def compute_hcf(x, y):
   while(y):
       x, y = y, x % y
       print(x, y)
   return x

a = 66528
b = 52920
print(compute_hcf(a, b))

EGCD

def egcd(a, b):
    x,y, u,v = 0,1, 1,0
    while a != 0:
        q, r = b//a, b%a
        m, n = x-u*q, y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
    gcd = b
    return gcd, x, y

print egcd(26513,32321)

>.?.<