소수를 구하는 대표적인 판별법으로 에라토스테네스의 체가 있다. 에라토스테네스의 체 원리는 다음과 같다.
에라토스테네스의 체를 사용할 때 시간 복잡도는 최적화 정도에 따라 다르지만, 일반적으로 O(Nlog(logN))이다.
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int[] a = new int[n + 1];
for (int i = 1; i <= n; i++) {
a[i] = i;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (a[i] == 0) continue;
for (int j = i+i; j <= n; j += i) {
a[j] = 0;
}
}
for (int i = m; i <= n; i++) {
if (a[i] > 1) {
System.out.println(a[i]);
}
}
}
}
오일러 피 함수 P[N]의 정의는 1 부터 N까지의 범위에서 N과 서로소(공약수가 1이외에 없는 수)인 자연수의 개수를 뜻한다.
두 수의 최대 공약수를 구하는 알고리즘으로, 소인수 분해를 이용한 공통된 소수들의 곱으로 표현하는 것 보다 좀 더 간단한 방법을 제시한다.
유클리드 호제법을 수행하기 위해서는 먼저 최대 공약수를 구하는데 사용할 MOD 연산(두 값을 나눈 나머지를 구하는 연산 - 10 % 4 = 2
)을 이해하고 있어야 한다.