[2022-2-18] OICLASS提高组模拟赛2 A·整数分解为2的幂
问题 A: 整数分解为 2 的幂
题目描述
任何正整数都能分解成 2 的幂,给定整数 N,求 N 的此类划分方法的数量!由于方案数量较大,输出 Mod 1000000007 的结果。
比如 N = 7 时,共有 6 种划分方法。
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
输入
输入一个数 N(1≤N≤10^6)
输出
输出划分方法的数量 Mod 1000000007
样例输入
7
样例输出
6
先放结论:
为什么是这样呢?
首先来看 \(N\) 为奇数的情况:
举个例子,6的拆分方法为:
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
1 1 4
2 2 2
2 4
共6种分解方法。
7的拆分方法呢?
1 1 1 1 1 1 1
1 1 1 1 1 2
1 1 1 2 2
1 1 1 4
1 2 2 2
1 2 4
我们发现,7的拆分在6的拆分的基础上最大的区别即在每组拆分的开头都加上了一个 \(1\) 。
这个多出来的 \(1\) 理论上是可以和其它的 \(1\) 合并的,然并卵,我们发现,当:
1 1 1 1 1 1 1
合并一次后得到
1 1 1 1 1 2
时,本质上与原来的
1 1 1 1 1 2
没有任何区别。那么,我们就得到了第一条结论:
\]
我们再来看偶数
举个例子,还是6的分解方法:
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
1 1 4
2 2 2
2 4
我们把它分为有 \(1\) 的拆分部分和没有 \(1\) 的拆分部分
先看有 \(1\) 的拆分部分:
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
1 1 4
我们发现,把每一种拆分的第一个 \(1\) 盖住之后,我们会发现这与5的拆分方式没有本质上的区别,和奇数一样,我们得到了第一个部分:
\]
再看没有1的部分,
2 2 2
2 4
因为拆分的全都是2的次幂,当1即 \(2^0\) 没有后,我们把拆分的每一项的每一个数除以2得:
1 1 1
1 2
我们发现,这本质上就是3的拆分,那么,我们就得到了第二个结论:
\]
把两个部分加起来,就得到了偶数的个数公式:
\]
那么看下代码:
#include<iostream>
using namespace std;
long long a[1000010];
int main(){
long long n;
a[1]=1;
for(long long i=2;i<=1000005;i++){
if(i%2==1){
a[i]=a[i-1]%1000000007;
}
else{
a[i]=(a[i-1]+a[i/2])%1000000007;
}
}
cin>>n;
cout<<a[n];
return 0;
}
The End.
[发布编辑时间]2022/2/18 20:52
[2022-2-18] OICLASS提高组模拟赛2 A·整数分解为2的幂的更多相关文章
- ZROI提高组模拟赛05总结
ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...
- NOIP2017提高组 模拟赛15(总结)
NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...
- NOIP2017提高组 模拟赛13(总结)
NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...
- NOIP2017提高组模拟赛 10 (总结)
NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...
- NOIP2017提高组模拟赛 8(总结)
NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...
- NOIP2017提高组模拟赛 9 (总结)
NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...
- NOIP2017提高组模拟赛 7(总结)
NOIP2017提高组模拟赛 7(总结) 第一题 斯诺克 考虑这样一个斯诺克球台,它只有四个袋口,分别在四个角上(如下图所示).我们把所有桌子边界上的整数点作为击球点(除了4个袋口),在每个击球点我们 ...
- NOIP2017提高组模拟赛5 (总结)
NOIP2017提高组模拟赛5 (总结) 第一题 最远 奶牛们想建立一个新的城市.它们想建立一条长度为N (1 <= N <= 1,000,000)的 主线大街,然后建立K条 (2 < ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
随机推荐
- 使用estimatedRowHeight的优缺点
使用estimatedRowHeight的优缺点 1.优点 1> 可以降低tableView:heightForRowAtIndexPath:方法的调用频率 2> 将[计算cell高度的操 ...
- HTML 5的革新——语义化标签
感谢原文作者:html5jscss 原文链接:http://www.html5jscss.com/html5-semantics-section.html 大佬的下一篇博文:http://www.ht ...
- iconv(gb2312<->utf-8)
转载请注明来源:https://www.cnblogs.com/hookjc/ unix下安装PHP的module,需要重新编译PHP,Windows下安装模板,只需将php.ini里的配置打开相应的 ...
- Python property动态属性
from datetime import datetime, date class User: def __init__(self, name, birthday): self.name = name ...
- sublime中的emmet插件的使用技巧
1.我要生成一个2行3列,宽300px,高500px的表. table[width=300 height=500]>(tr>td{$}*3)*2
- MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)
一.缓存机制 使用缓存可以使应用更快地获取数据,避免频繁的数据库交互操作,尤其是在查询越多,缓存命中率越高 的情况下,缓存的作用就越明显. 1.缓存原理:Map ■ 查询时,先从缓存区查询:找到,返回 ...
- kali中安装arpspoof 报错
情境今天在使用arpspoof这个命令的时候,提示没有命令找不到,此时就想着安装一下没想到,碰上kali源不支持的问题 解决所以,此时需要做的就是安装阿里云或者其他镜像 步骤1. vim /etc ...
- Linux常用命令整理:文件目录管理
据说,你要对Linux文件做的事情,98%都记录在这篇文章里了. 1.ls命令 最常见的命令,相信刚进入linux命令行界面的时候,都要用这个命令看看当前目录下都有哪些文件吧. 名称:List 含义: ...
- Cadence物理库 LEF 文件语法学习【持续更新】
我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索. 关注公众号,拉你进"IC设计交流群". @ 目录 一.LEF简介 1.1 通用规则 1.2 管理 LEF 文件 二. ...
- Spring中@Autowired 注解的注入规则
默认根据类型,匹配不到则根据bean名字 1.声明一个service接口 public interface HelloService { void sayHello(); } 2.service接口的 ...