#莫比乌斯反演#洛谷 5221 Product

题目

∏i=1n∏j=1nlcm(i,j)gcd(i,j)\prod_{i=1}^n\prod_{j=1}^n\frac{lcm(i,j)}{gcd(i,j)}i=1nj=1ngcd(i,j)lcm(i,j)


分析

又是一波推式子的过程
=∏i=1n∏j=1nij1gcd(i,j)2=\prod_{i=1}^n\prod_{j=1}^nij\frac{1}{gcd(i,j)^2}=i=1nj=1nijgcd(i,j)21
=(n!)2n(∏i=1n∏j=1ngcd(i,j))−2=(n!)^{2n}(\prod_{i=1}^n\prod_{j=1}^ngcd(i,j))^{-2}=(n!)2n(i=1nj=1ngcd(i,j))2
=(n!)2n(∏d=1n∏i=1n∏j=1n[gcd(i,j)==d])=(n!)^{2n}(\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^n[gcd(i,j)==d])=(n!)2n(d=1ni=1nj=1n[gcd(i,j)==d])
=(n!)2n(∏d=1nd∏i=1⌊nd⌋∏j=1⌊nd⌋[gcd(i,j)==1])=(n!)^{2n}(\prod_{d=1}^nd\prod_{i=1}^{\lfloor\frac{n}{d}\rfloor}\prod_{j=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i,j)==1])=(n!)2n(d=1ndi=1dnj=1dn[gcd(i,j)==1])
=(n!)2n(∏d=1nd∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)==1])\large =(n!)^{2n}(\prod_{d=1}^nd^{\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i,j)==1]})=(n!)2n(d=1ndi=1dnj=1dn[gcd(i,j)==1])
指数就是2∗φ(⌊nd⌋)−12*\varphi(\lfloor\frac{n}{d}\rfloor)-12φ(dn)1
就可以O(n)求解了


代码

#include <cstdio>
#define rr register
using namespace std;
const int mod=104857601,N=1000101;
int n,phi[N],prime[N],cnt;
inline signed ksm(int x,int y){
	rr int ans=1;
	for (;y;y>>=1,x=1ll*x*x%mod)
	    if (y&1) ans=1ll*ans*x%mod;
	return ans;
}
signed main(){
	scanf("%d",&n); int ans=1,ans1=1;
	for (rr int i=1;i<=n;++i) phi[i]=i;
	for (rr int i=2;i<=n;++i){
		if (phi[i]==i) prime[++cnt]=i,phi[i]=i-1;
		for (rr int j=1;j<=cnt&&prime[j]*i<=n;++j){
			if (i%prime[j]==0){
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			phi[i*prime[j]]=phi[i]*(prime[j]-1);
		}
		ans=1ll*ans*i%mod;
	}
	for (rr int i=1;i<=n;++i) phi[i]=(phi[i-1]+phi[i]*2)%(mod-1); ans=ksm(ans,n<<1);
	for (rr int i=2;i<=n;++i) ans1=1ll*ans1*ksm(i,phi[n/i]-1)%mod;
	return !printf("%d",1ll*ans*ksm(ans1,mod-3)%mod);	
} 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值