2015 PWTC D5 D
1 ≤ n ≤ 1 0 18 1\le n\le 10^{18} 1≤n≤1018,现有面值 1 , 5 , 10 , 25 1,5,10,25 1,5,10,25 的硬币,求有多少种不同的取法使得硬币的面值和正好为 n n n ?
答案对 1 0 9 + 7 10^9+7 109+7 取模。
思路及解法
考虑 1 1 1 是所有其他硬币的公因数,可以先把 1 1 1 填充 n n n 个,然后用其他面值的硬币替代 1 1 1 。
那么用 ( i , j , k ) (i,j,k) (i,j,k) 枚举 25 , 10 , 5 25,10,5 25,10,5 的个数, ( i , j , k ) (i,j,k) (i,j,k) 合法(即 25 i + 10 j + 5 k ≤ n 25i+10j+5k\le n 25i+10j+5k≤n),则该三元组对答案贡献加一。
但
n
n
n 范围巨大,考虑对每一个
i
i
i 都能直接统计出有多少种
j
,
k
j,k
j,k 合法,记作
a
n
s
i
ans_i
ansi
a
n
s
i
=
(
⌊
n
−
25
i
5
⌋
+
1
)
+
(
⌊
n
−
25
i
5
⌋
+
1
−
10
×
1
5
)
+
(
⌊
n
−
25
i
5
⌋
+
1
−
10
×
2
5
)
+
.
.
.
.
.
.
ans_i=(\lfloor \frac{n-25i}{5}\rfloor+1) + (\lfloor \frac{n-25i}{5}\rfloor+1-\frac{10\times 1}{5}) + (\lfloor \frac{n-25i}{5}\rfloor+1-\frac{10\times 2}{5})+......
ansi=(⌊5n−25i⌋+1)+(⌊5n−25i⌋+1−510×1)+(⌊5n−25i⌋+1−510×2)+......
设
n
i
′
=
⌊
n
−
25
i
5
⌋
n'_i=\lfloor \frac{n-25i}{5}\rfloor
ni′=⌊5n−25i⌋,则
a
n
s
i
=
(
n
i
′
+
1
)
+
(
n
i
′
−
1
)
+
(
n
i
′
−
3
)
+
.
.
.
.
.
.
ans_i=(n'_i+1)+ (n'_i-1)+(n'_i-3)+......
ansi=(ni′+1)+(ni′−1)+(ni′−3)+......
考虑
n
i
+
1
′
=
n
i
′
−
5
n'_{i+1}=n'_i-5
ni+1′=ni′−5,有
a
n
s
i
+
1
+
a
n
s
i
=
(
n
i
′
+
1
)
+
(
n
i
′
−
1
)
+
(
n
i
′
−
3
)
+
(
n
’
i
−
4
)
+
.
.
.
+
1
=
(
n
i
′
+
1
)
+
(
n
i
′
−
1
)
+
(
n
’
i
−
2
)
(
n
i
′
−
3
)
2
=
(
n
i
′
+
1
)
+
(
n
i
′
−
1
)
+
(
n
’
i
−
3
)
+
(
n
’
i
−
3
)
2
2
\begin{aligned} ans_{i+1}+ans_i &= (n'_i+1)+ (n'_i-1)+(n'_i-3)+(n’_i-4)+...+1\\ &= (n'_i+1)+ (n'_i-1)+\frac{(n’_i-2)(n'_i-3)}{2}\\ &= (n'_i+1)+ (n'_i-1)+\frac{(n’_i-3)+(n’_i-3)^2}{2}\\ \end{aligned}
ansi+1+ansi=(ni′+1)+(ni′−1)+(ni′−3)+(n’i−4)+...+1=(ni′+1)+(ni′−1)+2(n’i−2)(ni′−3)=(ni′+1)+(ni′−1)+2(n’i−3)+(n’i−3)2
那么只需要求三个等差数列和一个等差数列平方和即可。
关于等差数列
a
i
=
d
×
i
+
b
a_i=d\times i+b
ai=d×i+b,其平方和可表示为(该式子可由
1
1
1 ~
n
n
n 的平方和推导)
∑
i
=
0
n
a
i
2
=
(
(
n
+
1
)
×
a
0
×
a
n
)
+
(
n
×
(
n
+
1
)
×
(
2
×
n
+
1
)
×
d
2
)
6
\sum_{i=0}^{n}a_i^2 = ((n+1)\times a_0\times a_n)+\frac{(n\times (n+1)\times (2\times n+1)\times d^2)}{6}
i=0∑nai2=((n+1)×a0×an)+6(n×(n+1)×(2×n+1)×d2)
根据上述式子则有:
∑
i
=
0
n
25
a
n
s
i
=
(
n
0
′
+
1
)
+
(
n
0
′
−
1
)
+
(
n
’
0
−
3
)
+
(
n
’
0
−
3
)
2
2
+
(
n
0
′
−
10
+
1
)
+
(
n
0
′
−
10
−
1
)
+
(
n
’
i
−
10
−
3
)
+
(
n
’
i
−
10
−
3
)
2
2
+
.
.
.
.
.
.
=
(
(
n
’
0
+
1
)
%
10
)
∗
(
⌊
n
’
0
+
1
10
⌋
+
1
)
+
10
∗
(
(
⌊
n
’
0
+
1
10
⌋
)
2
+
⌊
n
’
0
+
1
10
⌋
)
2
+
(
(
n
’
0
−
1
)
%
10
)
∗
(
⌊
n
’
0
−
1
10
⌋
+
1
)
+
10
∗
(
(
⌊
n
’
0
−
1
10
⌋
)
2
+
⌊
n
’
0
−
1
10
⌋
)
2
+
1
2
[
(
(
n
’
0
−
3
)
%
10
)
∗
(
⌊
n
’
0
−
3
10
⌋
+
1
)
+
10
∗
(
(
⌊
n
’
0
−
3
10
⌋
)
2
+
⌊
n
’
0
−
3
10
⌋
)
2
+
(
(
⌊
n
’
0
−
3
10
⌋
+
1
)
∗
(
(
n
’
0
−
3
)
%
10
)
∗
(
n
’
0
−
3
)
)
+
(
⌊
n
’
0
−
3
10
⌋
∗
(
⌊
n
’
0
−
3
10
⌋
+
1
)
∗
(
2
∗
⌊
n
’
0
−
3
10
⌋
+
1
)
)
∗
1
0
2
6
]
\begin{aligned} &\sum_{i=0}^{\frac{n}{25}} ans_i\\ =&(n'_0+1)+ (n'_0-1)+\frac{(n’_0-3)+(n’_0-3)^2}{2}\\ +&(n'_0-10+1)+ (n'_0-10-1)+\frac{(n’_i-10-3)+(n’_i-10-3)^2}{2}\\ +&......\\ \\ =&((n’_0+1)\%10)*(\lfloor\frac{n’_0+1}{10}\rfloor+1)+10*\frac{((\lfloor\frac{n’_0+1}{10}\rfloor)^2+\lfloor\frac{n’_0+1}{10}\rfloor)}{2}\\ +&((n’_0-1)\%10)*(\lfloor\frac{n’_0-1}{10}\rfloor+1)+10*\frac{((\lfloor\frac{n’_0-1}{10}\rfloor)^2+\lfloor\frac{n’_0-1}{10}\rfloor)}{2}\\ +&\frac{1}{2}\big[((n’_0-3)\%10)*(\lfloor\frac{n’_0-3}{10}\rfloor+1)+10*\frac{((\lfloor\frac{n’_0-3}{10}\rfloor)^2+\lfloor\frac{n’_0-3}{10}\rfloor)}{2}\\ \ &+((\lfloor\frac{n’_0-3}{10}\rfloor+1)*((n’_0-3)\%10)*(n’_0-3))\\ \ &+\frac{(\lfloor\frac{n’_0-3}{10}\rfloor*(\lfloor\frac{n’_0-3}{10}\rfloor+1)*(2*\lfloor\frac{n’_0-3}{10}\rfloor+1))*10^2}{6}\big] \end{aligned}
=++=++ i=0∑25nansi(n0′+1)+(n0′−1)+2(n’0−3)+(n’0−3)2(n0′−10+1)+(n0′−10−1)+2(n’i−10−3)+(n’i−10−3)2......((n’0+1)%10)∗(⌊10n’0+1⌋+1)+10∗2((⌊10n’0+1⌋)2+⌊10n’0+1⌋)((n’0−1)%10)∗(⌊10n’0−1⌋+1)+10∗2((⌊10n’0−1⌋)2+⌊10n’0−1⌋)21[((n’0−3)%10)∗(⌊10n’0−3⌋+1)+10∗2((⌊10n’0−3⌋)2+⌊10n’0−3⌋)+((⌊10n’0−3⌋+1)∗((n’0−3)%10)∗(n’0−3))+6(⌊10n’0−3⌋∗(⌊10n’0−3⌋+1)∗(2∗⌊10n’0−3⌋+1))∗102]
那么这个式子就是答案。