유클리드 호제법
by C-an
- 두 수를 입력받는다.
- 두 수중 큰수와 작은수를 구분한다.
int t1=a,t2=b; //최소공배수를 구하기 위해 입력받은 값 저장
if(val1<val2){ //2번째 입력수가 클 경우 큰수를 val1으로 변경
a = t2;
b = t1;
}
- 두 수를 나눈 나머지가 0일때 까지 큰수와 작은수를 나눈다.
while(r>0){
r = a % b;
a = b;
b = r;
}
- 나머지가 0이 되는 순간 큰수가 최대공약수이다.
- 처음 입력받은 두수의 곱을 최대공약수로 나누면 최소공배수가된다.
LCM = t1* t2/a;
다음은 전체 결과:
int t1=a,t2=b; //a, b의 정보를 담아놓기 위한 임시 변수
if(a<b){ //큰 수를 a, 작은 수를 b로 둠
a = t2;
b = t1;
}
while(r>0){ // r이 0이 될 때까지 '큰 수 a를 작은 수 b로 계속 나누기/ a, b교환 /나머지를 b로'를 반복한다.
r = a % b;
a = b;
b = r;
}
LCM = t1* t2/a; //나머지가 0이 될 때까지 계산한 결과 a는 GCD이며, 원래 숫자인 a, b에 GCD를 곱하면 LCM가 된다.
System.out.println("GCD: "+ a);
System.out.println("LCM: "+ LCM);
Subscribe via RSS