알고리즘 모음(C++)

백준 9506 - 약수들의 합(C++) 본문

백준

백준 9506 - 약수들의 합(C++)

공대생의 잡다한 사전 2023. 12. 9. 22:20

문제 링크입니다. https://www.acmicpc.net/problem/9506

9506번: 약수들의 합

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

www.acmicpc.net

약수들을 구할 수 있는지를 물어보는 문제입니다.


자신을 포함하지 않은 약수이니, 1부터 N/2까지 확인해, 나눠떨어지는지를 확인하면 됩니다.

나눠떨어지는 수를 전부 더한 뒤, 이들의 합이 N과 같은지 확인해면 됩니다.

자세한 것은 코드를 참고해주세요.

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
using namespace std;

int N;
vector<int> Div;

void solve(){
	int sum = 0;
	for(int i = 1; i <= N/2; i++){
		if(N % i == 0){
			Div.push_back(i);
			sum += i;
		}
	}
	if(sum == N){
		cout << N << " " << "=" << " ";
		for(int i = 0; i < Div.size(); i++){
			cout << Div[i];
			if(i != Div.size() - 1) cout << " " << "+" << " "; 
		}
		cout << "\n";
	}
	else{
		cout << N << " " << "is NOT perfect." << "\n";
	}
	Div.clear();
}

int main() {
	cin.tie(0);
	cout.tie(0);
	while(1){
		cin >> N;
		if(N == -1) break;
		solve();	
	}
	return 0;
}


질문 및 조언은 댓글을 남겨주세요.