Codeforces 55D Beautiful numbers

题意

一个十进制数能被自身非零数整除则是一个美丽数,求[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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值