Actually
其实 $100000000$ 内的完全数没有几个
Good!
数学部分
$100000000$ 内的完全数有且仅有 $6, 28, 496, 8128, 33550336$ 这五个.
根据上述内容, 这道题可以直接 $O(1)$ 解决.
完全数比较重要的几个性质
- 所有完全数都是三角形数
- 目前截止发现的所有完全数都以 $6$ 或 $28$ 结尾
- 到现在为止,数学家们一共发现了 $48$ 个完全数,且 $48$ 个完全数全部是偶数
- 如果有人们没有找到的奇完全数,则它一定可以写成 $12^p + 1$ 或 $36^p + 9$ 的形式,而且 $p$ 是素数
- 奇完全数一定大于 $10^{300}$
- 完全数的约数的倒数之和为调和数
- 完全数可以表示成连续奇数的立方和
- 完全数可以表示成 $2$ 的连续自然数的次幂之和,且这些自然数的数量必定是素数
完全数计算法
若 $2^p - 1$ 是素数(亦称其为梅森素数),则 $2^{p - 1} * (2^p - 1)$ 是完全数.
同时,逆命题也是成立的:若$a$为偶完全数,则存在$\alpha$,使得$a=2^{\alpha-1}(2^\alpha-1)$,其中$2^\alpha-1$为素数
这个命题在初等数论中是极其好证的,因此留给读者作为练习
Code
#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;
}
乐 数学吊打C++
# 程序设计的背后竟然是数学
md,我写的两个循环超时了,没想到还能有这种做法,属实是给我整懵了
我也超时
sqrt优化一下
我也超时了
我也超时了
byd,我也超时,加了ios::sync_with_stdio(0);或者改cstdio都不行
不行
### 面向答案编程
## 哈哈哈哈哈哈这道题是数学把编程按在地上摩擦了属于是
hh
太强了,编译器出了一个大漏洞!!!
有人开了
乐死了
这个不行吧,在不知道判断条件的情况下根本写不出来
完全数是一种拥有固定数学性质的数,不依赖于给定的判断条件,而且分布及其稀疏,因此这种方法在这里是可行的
知道这些,其实都没必要写程序了
这个做法仅仅是个乐子,看看就好
好咧
##这波我站数学
我去,降维打击
这么叼
我的程序直接
Time Limit Exceeded
用我的就不会了哈哈哈哈哈哈哈哈哈哈哈
我的也是,老是超时
大佬大佬大佬大佬大佬大佬爱你爱你啊你啊你按啊你啊你太强了
烙铁,别太荒谬啊😢😢😢
6
数论秒了
好好好 给我整懵了
要是考这道题不是寄了。
what???!!!
面向结果编程