알고리즘 문제 풀이에 필요한 소수의 정의는 좀 다르다.
소수: 약수가 2개인 수
N
을 소수판정 한다고 했을 때, 2부터 N
의 제곱근까지 for
문을 돌려보고 없으면 소수가 더 없다.public class PrimeNumber {
public boolean isPrime(int candidate) {
if (candidate == 1) {
return false;
}
for (int i = 2; i * i <= candidate; i++) {
if (candidate % i == 0) {
return false;
}
}
return true;
}
}
위 소수판정과 동일하다.
N
을 입력 받았으면, N
의 제곱근까지만 갔을 때 상대쌍도 구할 수 있음N
이 100일 때, 100의 제곱근은 10이다. a
,b
의 다양한 쌍에 대해 a x b = 100
이라 하면a == b
이면 둘다 100의 제곱근인 10이다.위의 두 항목과는 성격이 조금 다르지만, 제곱근을 이용하여 시간 복잡도를 줄이는 로직은 동일하다.
N
을 소인수 분해해서 차례대로 a,b,c,d,e
가 나왔을 때, 다 곱하면 N
이 나온다.N
의 제곱근보다 큰 수를 두개 곱하면 N
보다 커진다.a,b,c,d,e
에는 N
의 제곱근 보다 큰 수가 없거나, 1개일 것이다.N
의 제곱근까지 for
문을 통하여 N
을 나누었을 때, 마지막 값이 1이 아닐 때 까지 출력한다.GCD
(최대공약수), LCM
(최소공배수)를 구할 때 유용하다.
LCM
의 경우에는, a와 b의 곱을 GCD
로 나누면 된다.N
까지의 배수를 다 처리하고 남은 수가 소수다.최소 소인수
로 채워놓으면 됨(그 수를 지우게 했던 수)N/x개 있다.
위의 내용을 잘 조합하면 된다.