약수이기 때문에 반복문을 전체가 아닌 중간값까지만 돌리면 된다.
중간값까지의 수들로 num을 나눠서 나누어 떨어지는게 약수
// 약수
public ArrayList getDivisor(int num) {
ArrayList result = new ArrayList();
for(int i = 1; i <= (int)num/2; i++){
if(num % i == 0){
result.add(i);
}
}
result.add(num);
return result;
}
유클리드 호제법을 사용한다
-> a,b의 최대 공약수는 a/b에서 나온 나머지 r과 b의 최대공약수와 같다.
// GCD: the Greatest Common Denominator
public int getGCD(int numA, int numB){
if(a%b == 0){
return b;
}
return gcd(b,a%b);
}
최소공배수는 두 수의 곱을 최대공약수로 나눈 값이다.
// LCM: the Lowest Common Multiple
public int getLCM(int numA, int numB) {
int lcm = -1;
int gcd = getGCD(numA, numB);
if(gcd != -1){
lcm = numA * numB / gcd;
}
return lcm;
}