แนวคิด
สมมติว่าต้องตรวจสอบว่าจำนวนที่กำหนดเป็น perfect number หรือไม่ จำนวนจะเป็น perfect number เมื่อเท่ากับผลรวมของตัวหารบวกทั้งหมดยกเว้นตัวมันเอง จำนวน n จะอยู่ในช่วง 10^8
เช่น ถ้าอินพุตคือ 28 ผลลัพธ์คือ True เพราะผลรวมตัวหาร: 1 + 2 + 4 + 7 + 14 = 28
วิธีแก้: เนื่องจากตัวเลขอยู่ในช่วง 10^8 มี perfect numbers เพียงไม่กี่ตัว หากอินพุตอยู่ในเซตนี้ คำตอบคือ true มิฉะนั้น false ตัวเลขคือ 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