第十五届蓝桥杯 Python B 组省赛(第二题解析)

第十五届蓝桥杯 Python B 组省赛(第二题解析)

[问题描述]

小蓝想要构造出一个长度为10000的数字字符串,有以下要求:
1.小蓝不喜欢数字0,所以数字字符串中不可以出现0;
2.小蓝喜欢数字3和 7,所以数字字符串中必须要有3和 7 这两个数字。
请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其 对 1 0 9 + 7 10^9+7 109+7取余后的结果。
[答案提交]
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写
多余的内容将无法得分。
[解题思路]
分析过程如下:
(1)首先,我们明确问题的约束条件

  • 数字字符串的长度为10000。
  • 字符串中不能包含数字0。
  • 字符串中必须包含数字3和7。
  • 接下来,我们考虑如何计算满足这些条件的字符串数量:

(2)全集大小:由于每个位置都可以从1到9这9个数字中选一个,所以全集的大小(即所有可能的数字字符串的数量)是 9 10000 9^{10000} 910000
(3)不满足条件的集合

  • 不包含数字3的字符串数量是 8 10000 8^{10000} 810000。(因为每个位置都可以从1, 2, 4, 5, 6, 7, 8, 9这8个数字中选一个)。
  • 不包含数字7的字符串数量也是 8 10000 8^{10000} 810000(同理)。
  • 但是,我们需要注意,当我们从全集中减去不包含数字3的字符串和不包含数字7的字符串时,我们多减去了那些同时不包含数字3和数字7的字符串。因此,我们需要将它们加回来。
  • 同时不满足条件的集合:同时不包含数字3和数字7的字符串数量是 8 10000 8^{10000} 810000
    (因为每个位置都可以从1, 2, 4, 5, 6, 8, 9这7个数字中选一个)。
    应用容斥原理:根据容斥原理,满足条件的字符串数量是全集大小减去不满足条件的集合大小,再加上多减去的部分。即:
    N = 9 10000 − 2 × 8 10000 + 7 10000 N=9^{10000}−2×8^{10000} +7^{10000} N=9100002×810000+710000

(4)取模运算:由于结果可能非常大,我们需要对 1 0 9 + 7 10^9 +7 109+7取余,以避免整数溢出。
(5)最后,我们可以使用快速幂算法来计算大数的幂并取模,以得到最终的结果。而Python的pow(a,x,mod)就是一个类似于快速幂算法的函数,我们可以直接用来求快速幂取模。
[题解]

mod = 10**9 + 7
p9 = pow(9, 10000, mod)
p8 = pow(8, 10000, mod)
p7 = pow(7, 10000, mod)

print((p9 - 2 * p8 + p7) % mod)
# 157509472

如果您觉得对您有帮助,就请给我点个赞吧!Thanks♪(・ω・)ノ

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值