题解 | 完全数计算
完全数计算
https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
#include <iostream> #include <set> using namespace std; typedef long long ll; ll cnt; void check(int x) { set<int> st; // 用集合去重 st.insert(1); // 先放入1,防止集合出现x本身 for(int i=2;i*i<=x;i++){ if(x%i==0){ // 往集合插入成对约数 st.insert(i); st.insert(x/i); } } int sum = 0; for(auto i:st) sum+=i; // 约数和 if(sum==x) cnt++; } int main() { int n;cin>>n; for(int i=6;i<=n;i++)check(i); cout<<cnt; } // 64 位输出请用 printf("%lld")