[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,我们可以用上面的规则产 ...
随机推荐
- 「LOJ 6373」NOIP2017 普及组题目大融合
NOIP2017 普及组题目大融合 每个读者需要有某个后缀的书,可以暴力map,复杂度\(o(9*nlog(n))\),也可以反串建trie树,复杂度\(o(9*n)\). 故可以求出需要的最少的RM ...
- Request与Response
前言 request和response对象是由服务器创建的.我们来使用它们: request对象是来获取请求消息,response对象是来设置响应消息. Request 定义 服务器进行创建,通过该对 ...
- redis清缓存
先查询当前redis的服务是否已经启动 ps -ef|grep redis [root@guanbin-k8s-master ~]# ps -ef|grep redis redis 1557 1 0 ...
- HTML元素的隐藏方式
感谢原文作者:幼儿园中的小小白 原文链接:https://blog.csdn.net/weixin_43846130/article/details/95963426 一.元素的隐藏方式: 1.dis ...
- #import和#include区别
#import与#include的类似,都是把其后面的文件拷贝到该指令所在的地方 #import可以自动防止重复导入 #import <> 用于包含系统文件 #import"&q ...
- 一键部署lamp 脚本
一键部署lamp 脚本 如下: #!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #----- ...
- Solution -「LOCAL」解析电车
\(\mathcal{Description}\) 给定 \(n\) 个点 \(m\) 条边的无向图,每条边形如 \((u,v,r)\),表示 \(u,v\) 之间有一条阻值为 \(r\Omega ...
- HMS Core积极探索基于硬件耳返的功能,帮助唱吧整体唱歌延迟率降低60%
唱吧的使命是让唱歌更简单.让生活更美好,其布局的K歌业务专注于让曲库更全.音质更好,开创了同框合唱.弹唱等有意思的游戏类K歌玩法.为了让用户拥有更加沉浸的娱乐体验,唱吧与HMS Core积极探索基于硬 ...
- 从零开始, 开发一个 Web Office 套件(4):新的问题—— z-index
<从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office ...
- Spring中publish如何将多个Event和多个Listener进行无误差匹配
从命令模式的维度理解Spring 之Application Event - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中通自定义简单的Event和Listener阐述了Spring中pu ...