Date:2022.03.27
题目描述
如果一个数的所有连续三位数字都是大于100的素数,则该数称为三素数数。比如113797是一个6位的三素数数。
输入格式
一个整数n(3 ≤ n ≤ 10000),表示三素数数的位数。
输出格式
一个整数,表示n位三素数的个数m,要求输出m除以10^9 + 9的余数。
输入输出样例
输入 #1复制
4
输出 #1复制
204
思路:开始讨论了最后加上1、2、3位数,发现只需要讨论最后1位数即可非常方便实现状态转移。并且不论结尾加几位数都与加1位数重叠。
由此,状态转移方程: f [ i ] [ j ] [ k ] : 共 i 位 的 数 , 末 尾 两 位 分 别 为 j 、 k 的 三 素 数 数 的 个 数 。 f[i][j][k]:共i位的数,末尾两位分别为j、k的三素数数的个数。 f[i][j][k]:共i位的数,末尾两位分别为j、k的三素数数的个数。
状态转移: f [ i ] [ j ] [ k ] = f [ i + 1 ] [ k ] [ u ] + f [ i ] [ j ] [ k ] ; 【 前 提 保 证 j ∗ 100 + k ∗ 10 + u 是 素 数 & & 要 > 100 】 f[i][j][k]=f[i+1][k][u]+f[i][j][k];【前提保证j*100+k*10+u是素数\&\&要>100】