1 条题解
-
0
自动搬运
来自洛谷,原作者为

Alex_Wei
**搬运于
2025-08-24 21:45:51,当前版本为作者最后更新于2019-05-01 11:53:34,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Upd on 2020.7.29:修正 Latex。
所有正整数都可以被表示为 的次方相加的形式。
例如 :
。
。
。
。
通过观察,我们可以发现:
所有正整数都可以被拆成不大于 个互不相同的 的次方相加。
解决这个题目主要就是根据这个定理。
当 时,序列是这样的:
把这个序列的所有数按照上面的方法表示出来。
$2^0\quad 2^1\quad 2^0+2^1\quad 2^2\quad 2^0+2^2\quad 2^1+2^2\quad 2^0+2^1+2^2\quad 2^3$
这样操作的方法就一目了然了吧?
Step 1:将所有 " " 减去,得到序列:
$0\quad 2^1\quad 2^1\quad 2^2\quad 2^2\quad 2^1+2^2\quad 2^1+2^2\quad 2^3$。
Step 2:将所有 " " 减去,得到序列:
$0\quad 0\quad 0\quad 2^2\quad 2^2\quad 2^2\quad 2^2\quad 2^3$。
Step 3:将所有 " " 减去,得到序列:
$0\quad 0\quad 0\quad 0\quad 0\quad 0\quad 0\quad 2^3$。
: 将所有 " " 减去,得到序列:
。
这样,我们就把这个序列里的所有数全部变成了 。
总共 次操作。
所以,对于所有的 ,操作的次数为 。
代码如下
#include<bits/stdc++.h> using namespace std; int n; int main(){ cin>>n; cout<<(int)log2(n)+1; return 0; }求赞 (〃'▽'〃) 。
- 1
信息
- ID
- 2217
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者