[백준] Baekjoon Online Judge

문제
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이때, 약수들은 오름차순으로 나열해야 한다.
n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
풀이
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while (true) {
int n, sum = 1;
cin >> n;
if (n == -1) break;
vector<int> arr;
// 약수 찾기
for (int i = 2; i < sqrt(n); i++) {
if (n % i == 0) {
arr.push_back(i);
arr.push_back(n / i);
sum += (i + (n / i));
}
}
// 출력
if (sum != n) cout << n << " is NOT perfect.\n";
else {
sort(arr.begin(), arr.end());
cout << n << " = 1";
for (int num : arr) cout << " + " << num;
cout << '\n';
}
}
return 0;
}
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 2096번 - 내려가기 (1) | 2024.01.31 |
---|---|
[Baekjoon/C++] 21921번 - 블로그 (0) | 2024.01.26 |
[Baekjoon/C++] 16969번 - 차량 번호판 2 (0) | 2024.01.20 |
[Baekjoon/C++] 1309번 - 동물원 (0) | 2024.01.18 |
[Baekjoon/C++] 16922번 - 로마 숫자 만들기 (0) | 2024.01.15 |