유클리드 호제법의 이론과 실장
5576 단어 수학.시합 프로그램 설계계산법유클리드의 호제법tech
공부 중이라 기술 내용이 틀릴 수 있습니다.이런 상황에서 죄송합니다. 댓글에 지적해 주셨으면 좋겠습니다.
※ 링크 대상 Qita 기사 저자 본인 전재.
유클리드의 상호 제곱법은?
큰 숫자의 최대 공약수를 빠르게 계산하는 방법.유클리드의 상호제곱법에서'상호제곱법'은'제법이 끝나기 전에 상호제곱법'이라는 뜻이다.
(산출량이 왜 O(log2N)인지에 대해서는 추후 추가 설명이 있을 예정입니다.)
전제 1 최대 공약수
두 개 이상의 정수의 공동 약수 중 가장 큰 숫자.
예를 들어 12와 18의 최대 공약수는 6이다.9와 120의 최대 공약수는 3이다.[1]
전제2 유클리드의 호제법은 왜 성립되었는가
a와 b의 최대 공약수는 gcd(a, b)이다.[2]
예를 들어 gcd(12,18)=6
a = b * q + r
上記が成り立つ時
gcd(a, b) = gcd(b, r)
상술한 것은 왜 성립되었습니까?세 단계로 나눠서 생각해보면 알겠지.
割り算の等式:a ÷ b = q あまり rが成り立つ時
a = b * q + r
gcd(a, b) = G1, gcd(b, r) = G2とします。
(1)
r = a - b * q = G1(a' - b' * q')と変形できます。
つまりrの約数にはG1があるわけです。gcd(b, r)はbとrの最大公約数なので下記が言えます。
gcd(r, b) >= gcd(a, b)
つまり、G2 >= G1
(2)
a = G2(b'' * q'' + r'')と変形できます。
つまりaの約数にはG2があるわけです。gcd(a, b)はaとbの最大公約数なので下記が言えます。
gcd(a, b) >= gcd(r, b)
つまり、G1 >= G2
(3)
上記ふたつより、G1 = G2が言えます。
사용법
실제 3355와 2379의 최대 공약수를 구하려고 시도하다
종이에 써 보세요.(이하 참조사이트 설명
만약 바로 이해하지 못한다면 상술한 것과 전제하에서 진술한 조건을 고려해 보겠습니다.
a ÷ b = q あまり r ⇒ gcd(a, b) == gcd(b, r)
b ÷ r = q'あまりr' ⇒ gcd(b, r) == gcd(q', r')
위 이미지와 같은 구체적인 예에 적용
3355 ÷ 2379 = 1 あまり 976 ⇒ gcd(3355, 2379) == gcd(2379, 976)
2379 ÷ 976 = 2 あまり 427 ⇒ gcd(2379, 976) == gcd(976, 427)
...省略
122 ÷ 61 = 2あまり0 ⇒ gcd(122, 61) == gcd(61, 0) == 61
gcd(33552379)=61로 거슬러 올라간다.즉, gcd(a, b)는 마지막에 베일 때의 제수와 같다.우선 최대 공약수 를 일반적 으로 제시 하다
그냥 꺼내봐.이렇게 하면 작은 숫자도 시간 안 걸려서 풀 수 있어.
# first, secondのうち小さい方を最大値としてそこから-1ずつして両方を割り切れるものを探す
def boring_gcd_method(first, second):
limit = min(first, second)
# print("limit", limit) # debug
for i in range(limit, 0, -1):
# print("i", i) # debug
if first % i == 0 and second % i == 0:
return i # int
유클리드의 상호 제곱법으로 제기하다
상술한 방법도 괜찮다. 예를 들어 239520000과 1299340000의 최대 공약수를 요구하면 시간이 걸려 귀찮아 보인다.
# a = b * q + r, gcd(a, b) == gcd(b, r)
def euclidean_algo(first, second): # good
while second:
first, second = second, first % second
# print("first, second", first, second) # debug
return first # int
사이트 축소판 그림
Studyplus 유클리드의 상호 제곱법
고등학교 수학 미물어 유클리드 호제법 증명과 부정 방정식
각주
그나저나 (이번에는 상관없다) 이른바'호위소'는 최대 공약수가 1인 숫자 사이를 가리킨다.예를 들어 3과 10의 최대 공약수는 1로 서로 수수하다고 할 수 있다.↩︎
Greatest common divisor의 생략↩︎
Reference
이 문제에 관하여(유클리드 호제법의 이론과 실장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kumamoto/articles/0bde76bba8b0c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)