
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong(); //현재 소인수 구성 (범위가 10^12까지 이므로 long 타입으로 선언)
long result = n; //서로소의 개수
for (int i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 반복
if (n % i == 0) {
result = result - (result / i); //n보다 작은 값중에 i의 배수의 개수만큼 제거
while ((n % i) == 0) { //소인수 구성에서 i를 뺌
n = n / i;
}
}
}
if (n > 1) { //반복문 종료 후 n이 1보다 크면 n이 마지막 소인수라는 의미이므로 빼줌
result = result - (result / n);
}
System.out.println(result);
sc.close();
}
}
GCD(n,k) = 1을 만족하는 자연수의 개수가 바로 오일러 피 함수의 정의이다.
이 문제는 오일러 피 함수를 알고 있는지 물어보는 정석적인 문제였다. 입력에서 n의 범위가 1 <= n <= 10^12 이므로 long 타입으로 선언해야 한다. 문제의 입력 조건을 잘 확인하자!