본문 바로가기

Coding/백준 온라인 저지 (Baekjoon Online Judge)

백준 온라인 저지(Baekjoon Online Judge) - 9506 : 약수들의 합

https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool isPerfect(int n){
    int sum = 0;
    vector<int> divisors;

    for(int i=1;i*i<=n;i++){
        if(n%i == 0){
            sum += i;
            divisors.push_back(i);
            if(i != n/i && i != 1){
                sum += n/i;
                divisors.push_back(n/i);
            }
        }
    }

    sort(divisors.begin(), divisors.end());

    if(sum == n){
        cout << n << " = ";
        for(int i=0;i<divisors.size()-1;i++){
            cout << divisors[i] << " + ";
        }
        cout << divisors[divisors.size()-1] << "\n";
        return true;
    }
    else{
        cout << n << " is NOT perfect.\n";
        return false;
    }
}

int main(){
    int n;
    while(true){
        cin >> n;
        if(n == -1) break;
        isPerfect(n);
    }
    return 0;
}