目录
数字串个数
问题描述
小蓝想要构造出一个长度为 1000010000 的数字字符串,有以下要求:
-
小蓝不喜欢数字 00,所以数字字符串中不可以出现 00;
-
小蓝喜欢数字 33 和 77,所以数字字符串中必须要有 33 和 77 这两个数字。
请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对 109+7109+7 取余后的结果。
解析
不出现0,即每一位可能是1到9
必须要有3和7
逆向思维一下,可以用总的可能种类数9^10000减去不含有3或7的种类数
使用容斥原理,不含3或7的总种类数即为不含3的8^10000加上不含7的8^10000减去不含3也不含7的7^10000种
可以使用python内置的pow函数
内置的pow函数语法如下:
pow(x, y, z)
这里,x是底数,y是指数。如果提供了可选参数z,则会计算x的y次幂后对z取模,即计算pow(x, y) % z的结果。
代码
import os
import sys
# 请在此输入您的代码
#不出现0,即每一位可能是1到9
#必须要有3和7
#逆向思维一下,可以用总的可能种类数9^10000减去不含有3或7的种类数
#使用容斥原理,不含3或7的总种类数即为不含3的8^10000加上不含7的8^10000减去不含3也不含7的7^10000种
mod = 10**9 + 7
print((pow(9,10000,mod) - 2 * pow(8,10000,mod) + pow(7,10000,mod)) % mod)