题面
https://www.lydsy.com/JudgeOnline/problem.php?id=4816
题解
显然是莫比乌斯反演
首先得出
然后发现 我们要把d提出去
这样就好做了
跟SDOI2015的一道题类似
因为 $\left \lfloor \frac{n}{p} \right \rfloor \left \lfloor \frac{m}{p} \right \rfloor$只有$(\sqrt n +\sqrt m)$种取值 并且$\prod_{k|p} f[k]^{\mu(\frac{p}{k})}$对于每个p都是固定的
所以我们可以预处理$\prod_{k|p} f[k]^{\mu(\frac{p}{k})}$的前缀积 以及前缀积的逆元 这样可以方便的算出区间的乘积
然后对于每一组询问 我们枚举$(\sqrt n +\sqrt m)$种取值 就可以得出结果
Code
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 ll read(){ 6 ll x=0,f=1;char c=getchar(); 7 while(c<‘0‘ || c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} 8 while(c>=‘0‘ && c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}