传送门
设f(i)表示[i..n]组成的十进制数在模p意义下的值 那么f(i)-f(j)(j>i)就表示了[i..j-1]这一段区间表示的十进制数扩大10的若干次幂之后在模p意义下的值 如果不考虑质数2和5的话,扩大10的若干次幂是不应响结果的,因为剩余的质数都不是10的约数 那么如果要统计区间[l..r]有多少个子串满足是p的倍数的话,只需要统计f(l)..f(r+1)这些数中有多少对数相同就行了 将f(i)离散化之后搞一个计数器然后直接莫队就行了 然后特判一下2和5的情况,因为扩大了10的若干次幂,相当于加了若干个质因子2和5,不能像上面那样求 但是其实2和5的情况更简单 若p=2/5,如果某一个位上的数是能整除p,那它的后缀都是p的倍数都可以计算 然后搞一个前缀和每次查询的时候减一下就行了
新闻热点
疑难解答