蓝桥杯训练—召唤数学精灵
文章目录
- 一、题目
- 二、解析
- 三、代码
一、题目
数学家们发现了两种用于召唤强大的数学精灵的仪式,这两种仪式分别被称为累加法仪式
A(n)和累乘法仪式B(n)。
累加法仪式 A(n) 是将从 1 到 n的所有数字进行累加求和,即:A(n)=1+2+⋯+n
累乘法仪式 B(n) 则是将从 1 到 n 的所有数字进行累乘求积,即:B(n)=1×2×⋯×n
据说,当某个数字 i 满足 A(i)−B(i) 能被 100 整除时,数学精灵就会被召唤出来。
现在,请你寻找在 1 到 2024041331404202 之间有多少个数字 i,能够成功召唤出强大的数学精灵。
二、解析
由于B(i)是阶乘,当i≥10时,就是100的倍数了。那么只有A(i)也是100的倍数,才能满足A(i)−B(i)能被100整除。A(i)什么时候是100的倍数?A(i)是线性增长的,稍微算算就发现,每200个数,有4个A(i)是100的倍数。一共有2024041331404202/200*4个。
对于 i<10,我们可以直接计算 A(i)−B(i) 并检查是否能被 100 整除。
三、代码
python代码:
count = 0
for i in range(1, 10):
a = i * (i+1) // 2
b = 1
for j in range(1, i+1):
b *= j
if (a - b) % 100 == 0:
count += 1
c = 2024041331404202 // 200 * 4
count = count + c
print(count)
运行结果: