유클리드 와 확장 유클리드 설명 (기초 수론)
2744 단어 ACM_수론
1. 순환 i 는 mind (a, b) ~ 1 에서 첫 번 째 로 a 와 b 에 의 해 정 제 될 수 있 는 i 는 a 와 b 의 최대 공약수 이다.
2. 전전 상감 법
3. 전전 상 제법, 즉 유클리드.
알고리즘 1: 폭력 구 해
int gcd(int a,int b)
{
int ans;
for(int i = min(a,b); i > 0; i--)
{
if(a%i==0 && b%i==0)
{
ans = i;
break;
}
}
return ans;
}
폭력 구 해 는 a, b 가 비교적 크 고 서로 채식 할 때 매우 시간 이 걸린다.
알고리즘 2: 전전 상감 법
4. 567913. 전전 상감 법 은 매우 좋다.
알고리즘 3: 전전 상 제법
int gcd(int m,int n)
{
if (m==n) return m;
if(m
귀속 서법 사진 은 매우 간단 하 다. 내 가 좋아한다.❤ ω ❤)라 고 적 었 다.
매일 전전 상 제법 을 쓰 지만 왜 이러 는 지 는 확실히 증명 되 지 않 았 다.
유클리드 알고리즘 증명:
만약 우리 가 정수 a 와 b 의 최대 공약수 를 요구한다 면, 특별한 성명 이 없 으 면, 아래 에 나타 난 소문 자 는 모두 정 수 를 대표 합 니 다.
q = a / b (이 나눗셈 은 정 제 를 가리 키 는 말) 는 상, r = a% b 는 나머지 이 고 d = gcd (a, b), 즉 a, b 의 최대 공약 수 는 d 이다.
... 하면 a = b*q + r
d 는 a 와 b 의 최대 공약수 이기 때문에 정수 c1, c2 는 a = c1 * d 가 존재 합 니 다. , b = c2*d
a = b * q + r 때문에,
그래서 r = a - b * q
= c1*d - c2*d*q
= d*(c1-c2*q)
c1, c2, q 는 모두 정수 이기 때문에 c1 - c2 * q 도 정수 입 니 다. 위의 식 에서 r / d = c1 - c2 * q 를 볼 수 있 습 니 다.
이 를 통 해 알 수 있 듯 이 d 도 r 의 인자 이다. d 는 b 의 인자 이기 때문에 d 는 b 와 r 의 공인 자 이지 만 지금 은 d 를 끝까지 증명 해 야 한다.
b 와 r 의 최대 공약수 아 닙 니까?
계속 증명 하 세 요. c 가 b 와 r 의 임 의 공약수 라 고 가정 하면 b 는 c 의 배수 이 고 r 도 c 의 배수 입 니 다. a = b * q + r 에서
a 는 반드시 c 의 배수 임 을 알 수 있 기 때문에 c 도 a, b 의 인자 이지 만 a, b 의 최대 공인 자 는 d 이기 때문에 c < = d.
또한 c 는 b 와 r 의 임 의 공약수 이기 때문에 c 는 b 와 r 의 최대 공약수 일 수 있 고 c 는 d 보다 작다.
d 는 b 와 r 의 공약수 이기 때문에 d 는 b 와 r 의 최대 공약수 이다.
따라서 d = gcd (b, r).
다시 말 하면 d = gcd (a, b) = gcd (b, r) = gcd (b, a% b)
위의 식 은 재 귀 과정 을 나타 내 는데 재 귀 가 끝 나 는 조건 은 0 이 고 이때 마지막 나머지 는 0 이다.
유클리드 알고리즘 추론: 유클리드 확장
d = gcd (a, b) 가 있 으 면 x 와 y 가 x + by = d 를 사용 합 니 다.
이 점 을 우 리 는 역 추 유클리드 알고리즘 을 통 해 얻 을 수 있다.
우 리 는 유클리드 알고리즘 이 마지막 까지 실 행 된 것 을 안다.
a = gcd(a,b) = d, b = 0
x1 = 1 이 존재 합 니 다. y1 = (임 의 수, b 는 0 이기 때문에 우 리 는 보통 0 을 취한 다), a * x1 + b * y1 = d 의 성립 을 만족시킨다.
gcd (a, b) = gcd (b, r) 때문에
우 리 는 마지막 단계 에서 얻 을 수 있다 는 것 을 안다.
b*x1 + r*y1 = d;
r = a% b 아래 식 가 져 오기
b*x1 + a%b*y1 = d;
b*x1 + (a-a/b*b)*y1 = d
b*x1 + a*y1 - (a/b)*y1*b = d
a*y1 + (x1-(a/b)*y1)*b = d
풀이:
x2 = y1 y2 = x1 - (a/b)*y1;
마찬가지 로 우 리 는 인터넷 에서 계속 추천 할 수 있 습 니 다. 반드시 해 x 가 존재 한 다 는 것 을 알 수 있 습 니 다. y 는 x + by = gcd (a, b) 를 사용 합 니 다.
반드시.
알고리즘 구현: 유클리드 알고리즘 에서 작은 개선
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
본문 부분 은 이라는 책 을 참고 한 다 는 것 을 증명 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
유클리드 와 확장 유클리드 설명 (기초 수론)q = a / b (이 나눗셈 은 정 제 를 가리 키 는 말) 는 상, r = a% b 는 나머지 이 고 d = gcd (a, b), 즉 a, b 의 최대 공약 수 는 d 이다. d 는 a 와 b 의 최대 공약수 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.