loading...

[CF55D]Beautiful numbers

链接

Description

求满足以下条件的正整数 \(x\) 个数:

  • \(l\le x \le r\)
  • \(x\) 的每一个非 \(0\) 数位都能整除 \(x\)

\(1 \le l,r\le9\times10^{18}\)

Solution

思路比较顺的数位 \(\rm DP\)。由于 \(x\) 的每个非 \(0\) 数位均能整除 \(x\),所以 \(x\) 的非 \(0\) 数位的最小公倍数一定也能整除 \(x\)。令 \(f_{p,y,t}\) 表示当前枚举到第 \(p\) 位,所有数的最小公倍数为 \(y\),前 \(x\) 位组成的数字为 \(t\) 的方案数。这样时间复杂度显然爆炸,考虑缩小 \(y,t\) 的范围。

容易发现,\(y\) 必定是 \(2520=2^3\times 3^2 \times 5 \times 7=\mathrm{lcm}(2,3,4,\dots,9)\) 的因子。这样的 \(y\) 仅有 \(48\) 个。并且,\(2520\operatorname{|}t\)\(y \operatorname{|} t\) 的必要条件。易证 \((t\bmod 2520)\bmod y=t \bmod y\),所以我们改 \(t\) 的意义为前 \(x\) 位组成的数字模 \(2520\) 的结果。

时间复杂度 \(\mathcal O(T\left(\log_{10}r\right)mc)\)\(m=2520\)\(c\) 表示 \(2520\) 的因数个数,等于 \(48\)

see submission here!

posted @ 2025-02-14 15:05  goldspade  阅读(12)  评论(0)    收藏  举报