跳转至

二的幂拆分计数

预估时间限制:0.5 秒。内存限制:128 MB。

实际时限以标准程序在目标环境的最慢用例中位时间乘以 \(2\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。

背景故事

仓库只提供大小为二的幂的标准零件包。装配员需要恰好凑出指定数量,并统计不同的包装组合。

(本故事由GPT-6重写)

形式化问题描述

给定非负整数 \(N\) .考虑所有有限的非降序列

\[ 2^{e_1},2^{e_2},\ldots,2^{e_t}, \qquad 0\le e_1\le e_2\le\cdots\le e_t, \]

要求其和恰好为 \(N\) .同一大小可以重复使用;同一多重集合的不同排列不产生新方案。

求方案数对 \(1000000000\) 取模的结果。空序列的和为零,因此 \(N=0\) 时有一种方案。

输入格式

输入一行一个整数 \(N\) .

输出格式

输出一行一个整数,表示方案数对 \(1000000000\) 取模的结果。

样例

样例 1

输入

7

输出

6

样例 2

输入

8

输出

10

样例 3

输入

0

输出

1

样例解释

样例一有六种:\(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\) .样例二有十种。样例三只有空序列。

数据范围与保证

\(0\le N\le2^{63}-1\) .幂的指数为非负整数。

分值比例 额外条件
100% 无额外条件