※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4355번 문제인 서로소이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4355
4355번: 서로소
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 테스트 케이스는 n ≤ 1,000,000,000으로 이루어져 있다. 입력의 마지막 줄에는 0이 주어진다.
www.acmicpc.net
양의 정수 N이 주어질 때 N "미만"의 양의 정수 중 N과 서로소인 수의 개수를 출력하는 문제이다.
양의 정수 N에 대하여 N "이하"의 양의 정수 중 N과 서로소인 수의 개수를 구하는 함수인 오일러 phi함수 \(\phi(N)\)를 구현해 문제를 해결해주자. 이 때, N이 1보다 큰 경우 phi함수와 문제의 답이 같지만 1인 경우 그렇지 않음에 유의하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
ll N;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
while (N) {
if (N == 1) cout << 0 << '\n';
else {
ll x = 2, ans = N;
while (x * x <= N) {
if (N % x) x++;
else {
ans = (ans / x * (x - 1));
while (N % x == 0) N /= x;
}
}
if (N > 1) ans = (ans / N * (N - 1));
cout << ans << '\n';
}
cin >> N;
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 27389 // C++] Metronome (0) | 2023.02.07 |
---|---|
[BOJ 11340 // C++] Making the Grade? (0) | 2023.02.07 |
[BOJ 27310 // C++] :chino_shock: (0) | 2023.02.06 |
[BOJ 6081 // C++] Hay Expenses (0) | 2023.02.06 |
[BOJ 2564 // C++] 경비원 (0) | 2023.02.06 |