최대공약수랑 최소공배수 구하는거..
휘들램
질문 내용 :
이제 막 c언어를 배우는 왕초보입니다.
수학적 알고리즘을 보고 코딩을 해볼려고 하는데 너무 어렵네요;;
설명에 이렇게 써있어요.
a. 두 자연수 중에서 큰 수를 작은 수로 나눈 나머지가 0이라면 gcm은 나눈 수(작은 수) 이다.
예) 자연수 24와 6의 gcm : mod(24, 6) = 0 ⇒ 나머지가 0이므로 작은 수 6이 gcm이다.
b. 두 자연수 중에서 큰 수(제수)를 작은 수(피제수)로 나눈 나머지가 0이 아니라면 나눈 수를 제수로 치환하고 나머지를 피제수로 치환하여 나머지를 구하는 방법으로 나머지가 0이 될 때 까지 수행하여 나머지가 0으로 떨어질 때의 제수가 두 자연수의 gcm이다.
예) 자연수 24와 9의 gcm
1회. mod(24, 9) = 6 : 나머지가 0이 아님
2회. mod(9, 6) = 3 : 1회의 피제수 9를 제수로 나머지 6을 피제수로 치환 ⇒ 나머지가 0이 아님
3회. mod(6, 3) = 0 : 2회의 피제수 6을 제수로 나머지 3을 피제수로 치환 ⇒ 나머지가 0
⇒ 나머지가 0으로 떨어진 3회의 피제수 3이 gcm이다.
그런데 제가 숫자 두개를 입력하면 그 두개의 숫자중에 뭐가 더 큰 숫자인지 어떻게 알죠?
그러니까 제가 입력한 숫자두개중에서 큰 숫자를 먼저 구해야 작은수로 나눌것아닌가요?..;;
어쨌든 위에서 저렇게 최대공약수를 구하면 바로 최소공배수를 구하게끔 넘어가는데요
최소공배수(lcm) = (a×b)/gcm
이렇게요.
그래서 시작하면 숫자 두개를 입력하면 최대공약수와 최소공배수를 출력하고 끝나는 그런 알고리즘입니다.
초반에 너무 어려운 문제를 골랐나 싶네요;;
손도못대고있습니다... 에휴....
아 그리고 이 사이트에서 막 찾아보다보니 유클리드 어쩌구 그게 있던데요,
저 위에 하늘색으로 써진 저 방법이 유클리드방법인가요? 이것도 궁금합니다.