오일러 피 함수 은 1~N까지 범위에서 N과 서로소인 자연수의 개수를 뜻합니다.
해당 문제에서 을 만족하는 자연수의 개수가 바로 오일러 피 함수의 정의입니다.
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <deque>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
long N; // 소인수 구성
cin >> N;
long result = N; // 서로소의 개수
for(long i=2; i<=sqrt(N); i++)
{
if(N%i == 0) // 소인수라면
{
result = result - result / i; // 결과값 업데이트
while (N % i == 0)
N /= i; // 소인수 지우기, 2^7*11 이라면 11만 남긴다.
}
}
// 아직 소인수 구성이 남아있다면
// 반복문에서 제곱근까지만 탐색하기 때문에 1개의 소인수가 누락되는 케이스
if (N > 1)
result = result - result / N;
cout << result;
return 0;
}