반응형
리뷰
https://www.acmicpc.net/problem/11689
출근시간 유튜브로 오일러 피 함수에 대해 공부하여 푼 문제 수학자들은 참 위대한 것 같다.
전역 변수
없음
함수
없음
문제풀이
- long long타입의 변수 n에 값을 입력 받고, long long타입의 변수 ans에 n값을 저장한다.
- long long타입의 변수 p를 2로 초기화 한다.
- n의 양의 제곱근이 p보다 크거나 같을 경우 while루프를 수행한다.
- n을 p로 나눈 나머지가 0일 경우 더 이상 나눠질 수 없을 때 까지 n에서 p를 나누어 준다.
- ans에 ans를 p로 나눈 몫 * p - 1만큼의 값을 저장해 준다.
- p를 증가시켜 준다.
- 루프가 종료된 후 n값이 1보다 클 경우 ans에 ans를 n으로 나눈 몫 * n - 1만큼의 값을 저장해 준다.
- ans에 저장된 값을 출력해 준다.
트러블 슈팅
- ans / n보다 ans * (n - 1)을 먼저 해주었더니 오버플로우가 발생했다.
- 두 연산의 위치를 바꾸어 주니 AC를 받았다.
참고 사항
- n값이 크지 않아 p를 2부터 순회해도 특이 사항이 없다.
정답 코드
#include<iostream>
#include<cmath>
using namespace std;
int main() {
long long n; cin >> n;
long long ans = n;
long long p = 2;
while (p <= sqrt(n)) {
if (n % p == 0) {
while (n % p == 0) n /= p;
ans = ans / p * (p - 1);
}
p++;
}
if (n > 1) ans = ans / n * (n - 1);
cout << ans;
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
[P4] 백준 5670번 휴대폰 자판 C++ 트라이, 메모리 풀 (0) | 2025.01.20 |
---|---|
[S1] 백준 2468번 안전 영역 C++ 너비 우선 탐색, 플러드 필 (0) | 2025.01.20 |
[P5] 백준 15678번 연세워터파크 C++ 덱, 덱을 이용한 다이나믹 프로그래밍 (0) | 2025.01.19 |
[G4] 백준 13397번 구간 나누기 2 C++ 이분 탐색, 매개 변수 탐색 (0) | 2025.01.19 |
[G3] 백준 10423번 전기가 부족해 C++ 최소 신장 트리, 유니온-파인드, 정렬 (0) | 2025.01.18 |