题意
一个十进制数能被自身非零数整除则是一个美丽数,求[l,r]区间的美丽数个数。
题解
数位DP+记忆化搜索,用dp[k][lcm][rem]保存前面各位数字的最小公倍数为lcm,MOD 252==rem的情况下,往后填k位0~9可以有多少种合法方案。
第一维的规模为18。
1~9只能组合出48个不同的lcm,所以第二维可以离散化将规模缩减到48。
第三维的规模为252。为什么是MOD 252?假设高位数字为A,填的低位数字为B,则(A*10^k+B) %2520=((10A)%2520*10^(k-1)+B)%2520=((A%252)*10^k+B)%2520,即高位数字对最终结果 MOD 2520的影响仅与其MOD 252的结果有关。
接下来说明一个数是否为美丽数只与其MOD 2520的结果有关。假设一个数C的各位数字最小公倍数为lcm,则C%lcm=(2520M+P)%lcm=(2520%lcm*M+P)%lcm=P%lcm,而P=C%2520。