[백준] [C++] 11689번 GCD(n, k) = 1 (오일러 피 함수)

2021. 7. 15. 07:00알고리즘/백준

1. 문제

 

11689번: GCD(n, k) = 1 (acmicpc.net)

 

11689번: GCD(n, k) = 1

자연수 n이 주어졌을 때, GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

2. 풀이 

오일러 피 함수는 n과 서로소인 1부터 n까지의 정수를 리턴하는 함수이다.

오일러 피 함수 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

오일러 피 함수 - 위키백과, 우리 모두의 백과사전

오일러 피 함수의 그래프. ϕ(1)부터 ϕ(1000)까지의 값들을 나타낸다. 수론에서 오일러 피 함수(-函數, 영어: Euler’s phi (totient) function)는 정수환의 몫환의 가역원을 세는 함수이다. 즉, n이 양의 정

ko.wikipedia.org

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
 
using namespace std;
long long n;
 
long long factorSimple()
{
    long long ret = n;
    long long sqrtn = sqrt(n);
    for (long long div = 2; div <= sqrtn; div++) {
        if(n%div == 0) {
            ret = ret / div * (div - 1);
        }
        while(n%div==0) {
            n /= div;
        }
        
    }
    if(n != 1) { 
        ret = ret / n * (n-1);
    }
    return ret;
}
 
int main() {
    cin>>n;
    long long  answer = factorSimple();
    cout<<answer;
}
cs