유클리드 알고리즘 사용

유클리드 알고리즘 은 전전 상 제법 이 라 고 하 는데 이미 알 고 있 는 m,n 두 자연수 의 공인 수 를 구 하 는 데 쓰 인 다.절 차 를 결합 하여 전전 상제 의 구체 적 인 상황 을 설명 하 다.
먼저 귀속 실현 을 본다.

int getcd(int m,int n)
 {
     if (m < 0 || n <0) {
         return 0;
     }
     if(m < n)
     {
         int t = m;
         m = n;
         n = t;
     }
     if(m % n)
     {
         return getcd(n,(m % n));
     }
     else
     {
         return n;
     }
 }
주요 계산 과정 은 세 단계 로 나 뉜 다.
1.입력 한 두 개의 자연수 m>n 에 대해 나머지 r 를 취하 여 0<=r2.r 가 0 이면 n 은 원 하 는 결과 이 고 바로 돌아 갑 니 다.
3.r 가 0 이 아니면 할당 m=n,n=r 는 절차 1 부터 다시 실행 합 니 다.
두 자연수 의 공인 수의 정 의 는 계산 결과 가 발생 하 는 조건 을 설명 한다.단계 1 에서 계 산 된 나머지 r=0 이면 작은 수 는 공약수 이다.하면,만약,만약...0.자연수 m,n 의 관 계 는 m=kn+r(그 중에서 k 는 자연수)로 표시 할 수 있 고 등식 은 m 를 제거 할 수 있 는 모든 수 는 반드시 n 과 r 를 제거 할 수 있다 는 것 을 증명 할 수 있다.등식 은 r=m-kn 으로 변형 할 수 있 으 며,동시에 m,n 의 모든 수 를 제거 하 는 것 도 반드시 r 를 제거 할 수 있다 는 것 을 의미한다.즉,m,n 을 제거 할 수 있 는 수의 집합 은 n,r 를 제거 하 는 수의 집합 과 같다.그래서 서로 뒤 척 이 며 제거 하 는 방법 이 성립 되 었 다. 
유클리드 알고리즘 을 순환 적 으로 구현 하 는 버 전 을 발표 합 니 다.

int getcd2(int m,int n)
 {
     if (m < 0 || n <0) {
         return 0;
     }
     if(m<n)
     {
         int t=m;
         m=n;
         n=t;
     }
     int cd = 1;
     while(1){
         int r = m % n;
         if(0==r)
         {
             cd = n;
             break;
         }
         else {
             m=n;
             n=r;
         }
     }
     return cd;
 }

좋은 웹페이지 즐겨찾기