「NOI2016」循环之美(小性质+min_25筛)
传送门. 题解 感觉这题最难的是第一个结论。 x/y首先要互质,然后如果在10进制是纯循环小数,不难想到y不是2、5的倍数就好了。 因为十进制下除以2和5是除得尽的。 必然会多出来的什么东西。 如果是k进制,可以类比得gcd(y,k)=1。 证明: 假设纯循环的位数是l 则 \(x*k^l\equiv x(mod~y)\) \(k^l\equiv 1(mod~y)\) 要存在l的话,就必须有 \(gcd(k,y)=1\) ,反过来一样。 反演: \(Ans=\sum_{i=1}^n\sum_{j=1}^m[(i,j)=1]*[(j,k)=1]\) ) \(\sum_{d=1}^{min(n,m)} \mu(d)*[gcd(d,k)=1]*(n/d)*\sum_{j=1}^{m/d}[gcd(j,k)=1]\) 如果能解决前面的前缀和问题,后面的分块后容斥或者说预处理O(1)都不是问题。 然后你发现前面是个积性函数,而且是可以min_25筛的积性函数,不过要筛个两遍。 就没了…… Code: #include<bits/stdc++.h> #define fo(i, x, y) for(int i = x, B = y; i <= B; i ++) #define ff(i, x, y) for(int i = x, B = y; i < B; i ++) #define fd(i,