728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에 자연수의 개수 T가 주어진다. T은 1000보다 작은 수이다.
둘째 줄에는 공백을 사이에 두고 완전수인지 구해야 되는 자연수 N이 주어진다.(N<10000)
출력
T개 줄에 걸쳐서 각 자연수에 대해서 완전수면 ‘Perfect’, 부족수면 ‘Deficient’, 과잉수면 ‘Abundant’를 출력한다.
소스코드
#include <iostream> #include <vector> using namespace std; int main(void) { int t, sum, tmp; cin >> t; vector<int> arr(t); for (int i = 0; i < t; i++) cin >> arr[i]; for (int i = 0; i < t; i++) { if (arr[i] == 1) cout << "Deficient\n"; else { sum = 1; for (int j = 2; j < arr[i] / 2; j++) { if (arr[i] % j == 0) { if (arr[i] / j == j) sum += j; else if (arr[i] / j > j) sum += (arr[i] / j + j); else break; } } if (sum == arr[i]) cout << "Perfect\n"; else if (sum < arr[i]) cout << "Deficient\n"; else cout << "Abundant\n"; } } }
Tip
약수를 구할 줄 알면 문제를 잘 풀 수 있다. 필자는 이 문제를 계속 틀렸는데, 1일 경우에 완전수로 처리했기 때문이다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 14697 - 방 배정하기(KOI 2017 전국 - 초등부, 중등부) (0) | 2018.07.29 |
---|---|
백준] 1018 - 체스판 다시 칠하기 (0) | 2018.07.28 |
백준] 2564 - 경비원(KOI 2007 지역본선 초등부) (0) | 2018.07.23 |
백준] 11328 - Strfry(CCPC 2014) (0) | 2018.07.22 |
백준] 9506 - 약수들의 합(ACM-ICPC Regionals) (0) | 2018.07.19 |