
자연수 N이 주어졌을때, N보다 작고 서로소인 자연수의 개수를 구하는 간단한 문제다.
알고리즘 분류를 확인해봤을 때, 오일러 피 함수라는 생소한 분류가 보인다.
그렇다면 오일러 피 함수란 대체 뭘까?
나무위키에 오일러 피 함수를 검색해본다면 다음과 같은 수식을 확인할 수 있다.

이 때, 은 n보다 작으며, n과 서로소 관계에 있는 자연수의 개수를 의미한다.
오일러 피 함수는 아래와 같은 특징을 가진다.
p가 소수일 때, 이 성립한다. p가 소수라면 1~p-1 까지의 모든 자연수와 서로소이기 때문.
p가 소수이며, k가 자연수일 때 아래 수식이 성립한다.
예시는 아래와 같다.
서로소인 m, n에 대해서 이 성립한다.
서로소가 아닌 두 자연수에 대해서는 성립하지 않는다. 즉, 완전 곱셈적 성질을 갖지는 않는다.
으로 소인수분해할 수 있을 때, 아래 공식이 성립한다.
예시는 아래와 같다.
이 일반 공식을 사용한다면 쉽게 풀어낼 수 있다.
import java.io.*;
public class Main {
static long N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Long.parseLong(br.readLine());
long res = N;
for (long i = 2; i <= Math.sqrt(N); i++) {
if (N % i == 0) {
res -= res / i;
while (N % i == 0) N /= i;
}
}
if (N > 1) res -= res / N;
System.out.println(res);
}
}
