数学部分
100000000100000000 内的完全数有且仅有 6,28,496,8128,335503366,28,496,8128,33550336 这五个.
根据上述内容, 这道题可以直接 O(1)O(1) 解决.
完全数比较重要的几个性质
所有完全数都是三角形数
目前截止发现的所有完全数都以 66 或 2828 结尾
到现在为止,数学家们一共发现了 4848 个完全数,且 4848 个完全数全部是偶数
如果有人们没有找到的奇完全数,则它一定可以写成 12p+112p+1 或 36p+936p+9 的形式,而且 pp 是素数
奇完全数一定大于 1030010300
完全数的约数的倒数之和为调和数
完全数可以表示成连续奇数的立方和
完全数可以表示成 22 的连续自然数的次幂之和,且这些自然数的数量必定是素数
完全数计算法
若 2p−12p−1 是素数(亦称其为梅森素数),则 2p−1∗(2p−1)2p−1∗(2p−1) 是完全数.
#include <bits/stdc++.h>
using namespace std;
int main() {
int tt;
cin >> tt;
while (tt--) {
int n;
cin >> n;
if (n == 6 || n == 28 || n == 496 || n == 8128 || n == 33550336)
cout << n << " is perfect" << endl;
else cout << n << " is not perfect" << endl;
}
return 0;
}