티스토리 뷰

728x90

문제 링크

www.acmicpc.net/problem/11689

 

11689번: GCD(n, k) = 1

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

www.acmicpc.net

 

풀이

오일러 파이함수 $\phi(n)$를 구현하는 문제입니다. 어떤 수 $n$의 소인수 개수를 $m$개라 합시다.

$$\begin{eqnarray}\phi(n) &=& n\prod_{p|n}(1-\dfrac{1}{p}) \\ &=& n(1-\dfrac{1}{p_1})(1-\dfrac{1}{p_2})...(1-\dfrac{1}{p_{m}})\end{eqnarray}$$

식의 앞에서부터 차례대로 전개하는 방식으로 구현하시면 됩니다.

 

정답 코드

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;
    ll ans = n;
    for (ll i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            ans -= ans / i;
            while (n % i == 0) n /= i;
        }
    }
    if (n > 1) {
        ans -= ans / n;
    }
    cout << ans;
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 30 31
글 보관함