分金币
时间限制:1秒 内存限制:256M
【题目描述】
土老财偶然间赚了\(n\)枚金币,由于赚的太容易了,所以打算尽快花光所有金币。他可以自己保留一部分,然后把剩余的金币在若干天内平均分给他的两个儿子。
首先,他选择一个非负整数\(k(0≤k≤N)\),先把k枚金币留给自己。剩下的\(n-k\)枚金币将在\(d\)天内分给两个儿子。当然土老财也可以选择不给儿子们分,这对应于\(n=k\)且\(d=0\)的情况。
如果进行分金币,则每天的分配方式是:两个儿子当天得到相同数目的金币。如果某天大儿子得到\(x\)枚金币,那么小儿子也得到\(x\)枚金币,其中\(x\)必须是正整数。总的来说,每个儿子获得的总金额必须相同。
两种分配方案被视为不同,当且仅当满足以下条件中的至少一条:
◆选择的\(k\)不同;
◆天数\(d\)不同;
◆存在至少一天,儿子们当天获得的金额不同,即每日支付金额的序列不完全相同。
你的任务是计算土老财可以分配金币的不同方案数,输出结果对109+7取模后的值。
【输入格式】
第一行包含一个自然数\(n(1≤n≤10^{18})\),即题目中所述的金币数量。
【输出格式】
输出一个整数,表示土老财分配金币的不同方案数。
【输入输出样例1】
Input
4
Output
4
【样例1说明】
土老财共有n=4枚金币,考虑所有可能的k值:
◆k=4时:土老财留下所有金币,儿子们没有收到金币,这是一种分配方案。
◆k=2时:剩余2枚金币需要分。唯一可行的是d=1,即每个儿子得到1枚金币。
◆k=0时:剩余4金币需要分。存在两种可行的分配方案:
d=1时:每个儿子得到2枚金币;
d=2时:每天每个儿子得到1枚金币。
◆k=1和k=3时:剩余金币无法平均分配。
所以,总共有 1+1+2=4 种不同的分配方案。
【输入输出样例2】
Input
5
Output
4
【输入输出样例3】
Input
793
Output
137435472
【测试点性质】
【来源】
Mr.he