주어진 숫자가 완전수인지 아닌지 확인해야 한다고 가정해 봅시다. 숫자는 자신을 제외한 모든 양의 약수의 합과 같을 때 완전수라고 합니다. 숫자 n은 1^8 범위에 있습니다.
따라서 입력이 28과 같으면 출력은 제수 − 1 + 2 + 4 + 7+ 14 =28의 합으로 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
숫자가 10^8 범위에 있으므로 완전한 숫자는 거의 없습니다. 주어진 입력이 해당 집합에 있으면 대답은 참이 되고 그렇지 않으면 거짓이 됩니다. 완전한 숫자는 6, 28, 496, 8128 및 33550336입니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: bool checkPerfectNumber(int num) { set<int> set={6,28,496,8128,33550336}; return set.find(num)!=set.end(); } }; main(){ Solution ob; cout << (ob.checkPerfectNumber(28)); }
입력
28
출력
1