Baekjoon #9506

Baekjoon #9506

1개의 풀이 · C++

문제 원문 보기 ↗

SOLUTION INFO

C++ · main.cpp

main.cpp
#include<bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    while(true) {
        int N; cin >> N;
        if(N == -1) break;
        long long S = 1;
        vector<int> factor;
        for(long long i = 2; i * i <= N; ++i) {
            if(N % i == 0) {
                S += i;
                factor.push_back(i);
                if(i * i != N) {
                    S += N / i;
                    factor.push_back(N / i);
                }
            }
        }

        if(S == N) {
            sort(factor.begin(), factor.end());
            cout << N << " = 1";
            for(int x: factor) cout << " + " << x;
            cout << '\n';
        }
        else {
            cout << N << " is NOT perfect.\n";
        }
    }
    
    return 0;
}

SOLUTION DESCRIPTION

풀이 설명

테스트케이스 수의 최대 값이 정해져있지 않지만 O(NsqrtN) 시간복잡도의 솔루션은 통과