赞
踩
A
(
i
)
=
1
+
2
+
3
+
⋯
+
i
A(i) = 1 + 2 + 3 + \dots + i
A(i)=1+2+3+⋯+i。
B
(
i
)
=
1
×
2
×
3
×
⋯
×
i
B(i) = 1 \times 2 \times 3 \times \dots \times i
B(i)=1×2×3×⋯×i。
要使 ( A ( i ) − B ( i ) ) % 100 = 0 (A(i) - B(i)) \% 100 = 0 (A(i)−B(i))%100=0,应当要有 A ( i ) % 100 = B ( i ) % 100 A(i) \%100 = B(i) \% 100 A(i)%100=B(i)%100 。
B % 100 = 1 , 2 , 6 , 24 , 20 , 20 , 40 , 20 , 80 , 0 , 0 , 0 , 0 , … B \%100 = 1, 2, 6, 24, 20, 20, 40, 20, 80, 0, 0, 0, 0, \dots B%100=1,2,6,24,20,20,40,20,80,0,0,0,0,…。
我们会发现当 i ≥ 10 i \geq 10 i≥10 时, B ( i ) % 100 B(i) \% 100 B(i)%100 均为 0 0 0,因为 1 × 2 × 3 ⋯ × 10 1 \times 2 \times 3 \dots \times 10 1×2×3⋯×10 中含有两个因子 5 5 5,和多个( ≥ 2 \geq2 ≥2)因子 2 2 2, 2 × 5 = 10 2 \times 5 = 10 2×5=10,当存在 ≥ 2 \geq 2 ≥2 个因子 5 5 5 和 2 2 2 时,后两位必为 00 00 00。
A ( i ) = 1 + 2 + 3 + ⋯ + i = i × ( i + 1 ) ÷ 2 A(i) = 1 + 2 + 3 + \dots + i=i \times (i + 1) \div 2 A(i)=1+2+3+⋯+i=i×(i+1)÷2。
A ( i ) % 100 = i × ( i + 1 ) ÷ 2 % 100 A(i) \% 100 = i \times (i + 1) \div 2 \% 100 A(i)%100=i×(i+1)÷2%100。
要使 A ( i ) % 100 = 0 A(i) \% 100 = 0 A(i)%100=0,即 i × ( i + 1 ) % 200 = 0 i \times (i + 1) \% 200 = 0 i×(i+1)%200=0。
执行以下代码:
for i in range(1, 200 + 1):
if i * (i + 1) % 200 == 0:
print(i)
我们得知,一个长度为 200 200 200 的区间,会有 4 4 4 个 A ( i ) % 100 = 0 A(i) \% 100 = 0 A(i)%100=0。
综上,我们可以先手动模拟计算 [ 1 , 9 ] [1, 9] [1,9] 的情况,再计算题目给出的区间内,有多少个 200 200 200,即可得到答案。
res = 2024041331404202 // 200 * 4
s1 = 0
s2 = 1
for i in range(1, 9 + 1):
s1 += i
s2 *= i
if s1 % 100 == s2 % 100:
res += 1
print(res)
运行结果:
40480826628086
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。