小工具知识网

当前位置: 首页 > 行业知识 > 【数论】莫比乌斯反演巩固1

行业知识

【数论】莫比乌斯反演巩固1

2026-11-14 02:54:17 来源:互联网转载

文章目录

      • 前言
      • 洛谷P3455
      • 洛谷P1829
      • ���谷P4449

        前言

        这里需要对莫反有一些基础。

        ()

        不会的可以点这里

        洛谷P3455

        题意:

        ()

        给定 a , b , d a,b,d a,b,d

        求 ∑ x = 1 a ∑ y = 1 b [ gcd ⁡ ( x , y ) = d ] \sum_{x=1}^a\sum_{y=1}^b[\gcd(x,y)=d] ∑x=1a​∑y=1b​[gcd(x,y)=d]

        1 ≤ n ≤ 5 × 1 0 4 1\leq n\leq5\times 10^4 1≤n≤5×104, 1 ≤ d ≤ a , b ≤ 5 × 1 0 4 1 \leq d \leq a,b \leq 5 \times 10^4 1≤d≤a,b≤5×104

        按照套路:

        ∑ x = 1 a ∑ y = 1 b [ gcd ⁡ ( x , y ) = d ] \sum_{x=1}^a\sum_{y=1}^b[\gcd(x,y)=d] ∑x=1a​∑y=1b​[gcd(x,y)=d]

        = ∑ x = 1 a d ∑ y = 1 b d [ gcd ⁡ ( x , y ) = 1 ] =\sum_{x=1}^{\frac{a}{d}}\sum_{y=1}^{\frac{b}{d}}[\gcd(x,y)=1] =∑x=1da​​∑y=1db​​[gcd(x,y)=1]

        = ∑ x = 1 a d ∑ y = 1 b d ∑ k ∣ gcd ⁡ ( x , y ) μ ( k ) =\sum_{x=1}^{\frac{a}{d}}\sum_{y=1}^{\frac{b}{d}}\sum_{k|\gcd(x,y)}\mu(k) =∑x=1da​​∑y=1db​​∑k∣gcd(x,y)​μ(k)

        = ∑ x = 1 a d ∑ y = 1 b d ∑ k = 1 μ ( k ) [ k ∣ gcd ⁡ ( x , y ) ] =\sum_{x=1}^{\frac{a}{d}}\sum_{y=1}^{\frac{b}{d}}\sum_{k=1}\mu(k)[k|\gcd(x,y)] =∑x=1da​​∑y=1db​​∑k=1​μ(k)[k∣gcd(x,y)]

        = ∑ k = 1 min ⁡ ( a d , b d ) μ ( k ) ∑ x = 1 a d ∑ y = 1 b d [ k ∣ gcd ⁡ ( x , y ) ] =\sum_{k=1}^{\min(\frac{a}{d},\frac{b}{d})}\mu(k)\sum_{x=1}^{\frac{a}{d}}\sum_{y=1}^{\frac{b}{d}}[k|\gcd(x,y)] =∑k=1min(da​,db​)​μ(k)∑x=1da​​∑y=1db​​[k∣gcd(x,y)]

        = ∑ k = 1 min ⁡ ( a d , b d ) μ ( k ) ⌊ a d k ⌋ ⌊ b d k ⌋ =\sum_{k=1}^{\min(\frac{a}{d},\frac{b}{d})}\mu(k)\left\lfloor\frac{\frac{a}{d}}{k}\right\rfloor\left\lfloor\frac{\frac{b}{d}}{k}\right\rfloor =∑k=1min(da​,db​)​μ(k)⌊kda​​⌋⌊kdb​​⌋

        数论分块解决即可。

        Code:

        #include#define int long long#define IOS ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)using namespace std;const int N=2e6+1,M=2e6+1;int t,n,m,k,ans=0;struct fy{int prv[N],cnt,mu[N],sum[N];bool pr[N];void ola(int x){pr[1]=mu[1]=1;for(int i=2;iif(!pr[i])prv[++cnt]=i,mu[i]=-1;for(int j=1;jint u=i*prv[j];pr[u]=1;if(i%prv[j]==0){mu[u]=0;break;}else{mu[u]=-mu[i];}}}for(int i=1;iIOS;A.ola(N-1);cint;while(t--){cinn>>m>>k;n/=k,m/=k;ans=0;for(int l=1,r;lr=min(n/(n/l),m/(m/l));ans+=(A.sum[r]-A.sum[l-1])*(n/l)*(m/l);}coutint prv[N],cnt,g[N],s[N];bool pr[N];void ola(int x){pr[1]=g[1]=1;for(int i=2;iif(!pr[i])prv[++cnt]=i,g[i]=(1-i+mod)%mod;for(int j=1;jint u=i*prv[j];pr[u]=1;if(i%prv[j]==0){g[u]=g[i];break;}else{g[u]=g[i]*g[prv[j]]%mod;}}}}void getsum(int x){for(int i=1;iIOS;A.ola(N-1);A.getsum(N-1);cinnm;int ans=0;for(int i=1;ians+=A.s[n/i]*A.s[m/i]%mod*i%mod*A.g[i]%mod;ans%=mod;}coutint prv[N],cnt,g[N],s[N];bool pr[N];void ola(int x){pr[1]=g[1]=1;for(int i=2;iif(!pr[i])prv[++cnt]=i,g[i]=(1-i+mod)%mod;for(int j=1;jint u=i*prv[j];pr[u]=1;if(i%prv[j]==0){g[u]=g[i];break;}else{g[u]=g[i]*g[prv[j]]%mod;}}}}void getsum(int x){for(int i=1;iIOS;A.ola(N-1);A.getsum(N-1);cinnm;int ans=0;for(int l=1,r;lr=min(n/(n/l),m/(m/l));ans+=A.s[n/l]*A.s[m/l]%mod*((A.g[r]-A.g[l-1]+mod)%mod)%mod;ans%=mod;}coutint prv[N],cnt,g[N],s[N];bool pr[N];inline int qmi(int x,int y){int res=1;while(y0){if(y&1)res=res*x%mod;x=x*x%mod,y=1;}return res;}void ola(int x){pr[1]=g[1]=1;for(int i=2;iif(!pr[i])prv[++cnt]=i,g[i]=(qmi(i,k)-1+mod)%mod;for(int j=1;jint u=i*prv[j];pr[u]=1;if(i%prv[j]==0){g[u]=g[i]*qmi(prv[j],k)%mod;break;}else{g[u]=g[i]*g[prv[j]]%mod;}}}}void getsum(int x){for(int i=1;iIOS;cintk;A.ola(N-1);A.getsum(N-1);while(t--){cinnm;int ans=0;for(int l=1,r;lr=min(n/(n/l),m/(m/l));ans+=(n/l)*(m/l)%mod*((A.g[r]-A.g[l-1]+mod)%mod)%mod;ans%=mod;}cout

上一篇:魔兽怎么去别的服务器?

下一篇:解决Cannot read properties of undefined (...)类型的报错