Very obviously, 题目让我们求 n∏i=1m∏j=1fgcd(i,j)。
按照套路,我们枚举 gcd,转化为求 min(n,m)∏i=1fin∑x=1m∑y=1[gcd(x,y)=i]。
把指数那个式子拉出来单独讨论。
根据套路,有 n∑x=1m∑y=1[gcd(x,y)=i]=∑i|dμ(di)⌊nd⌋⌊md⌋=∑id≤min(n,m)μ(d)⌊nid⌋⌊mid⌋
那么 min(n,m)∏i=1fin∑x=1m∑y=1[gcd(x,y)=i]=min(n,m)∏i=1fi∑id≤min(n,m)μ(d)⌊nid⌋⌊mid⌋=min(n,m)∏i=1∏d|ifdμ(id)⌊ni⌋⌊mi⌋=min(n,m)∏i=1(∏d|ifdμ(id))⌊ni⌋⌊mi⌋
显然外层的指数可以数论分块,内层这个东西好像不太可做……
那就暴力预处理前缀积啊,反正枚举倍数 O(nlogn)!
另外此题超卡常,请全开 int 并预处理前缀积的逆元。
代码:
1 |
|