日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演)

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

枚舉倍數的一種靈活的變形:g(d)=∑d∣inf(i)=∑i=1?nd?f(i?d)g(d)=\sum_{d|i}^nf(i)=\sum_{i=1}^{\lfloor\frac{n}ozvdkddzhkzd\rfloor}f(i\cdot d)g(d)=din?f(i)=i=1?dn???f(i?d)
很顯然,但有時能發揮大作用。
其實本質還是要理解西格瑪究竟是在算什么

解析

一個重要的前置結論:
d(i?j)=∑x∣i,y∣j[gcd?(x,y)=1]d(i\cdot j)=\sum_{x|i,y|j}[\gcd(x,y)=1]d(i?j)=xi,yj?[gcd(x,y)=1]
證明:
嘗試把所有互質的數對 (x,y)(x,y)(x,y)i?ji\cdot ji?j 的所有因子建立雙射關系。首先,對于只有 i,ji,ji,j 一方有的質因子,直接歸給有該項質因子的那一方對應的 xxxyyy。對于雙方都有的質因子 ppp,若 iii 的對應次數為 aaajjj 的對應次數為 bbb,如果 i?ji\cdot ji?j 的某個因子 ppp 的次數 ccc 滿足 c≤ac\le aca,就當成 xxx 含有 pcp^cpc 的因子;若 c>ac>ac>a,就當成 yyy 含有 pc?ap^{c-a}pc?a 次方的因子。這樣我們就建立起了雙射關系,且所有的 x,yx,yx,y 都是互質的,證畢。

我們再化一下這個 ddd 函數:
d(i,j)=∑x∣i∑y∣j[gcd?(i,j)=1]=∑x∣i∑y∣j∑k∣gcd?(x,y)μ(k)=∑k∣i,k∣jμ(k)∑k∣x,x∣i∑k∣y,y∣j1=∑k∣i,k∣jμ(k)∑x∣ikik∑y∣jkjk1=∑k∣i,k∣jμ(k)d(ik)d(jk)d(i,j)=\sum_{x|i}\sum_{y|j}[\gcd(i,j)=1]\\=\sum_{x|i}\sum_{y|j}\sum_{k|\gcd(x,y)}\mu(k)\\=\sum_{k|i,k|j}\mu(k)\sum_{k|x,x|i}\sum_{k|y,y|j}1\\=\sum_{k|i,k|j}\mu(k)\sum_{x|\frac{i}{k}}^{\frac{i}{k}}\sum_{y|\frac{j}{k}}^{\frac{j}{k}}1\\=\sum_{k|i,k|j}\mu(k)d(\frac{i}{k})d(\frac{j}{k})d(i,j)=xi?yj?[gcd(i,j)=1]=xi?yj?kgcd(x,y)?μ(k)=ki,kj?μ(k)kx,xi?ky,yj?1=ki,kj?μ(k)xki?ki??ykj?kj??1=ki,kj?μ(k)d(ki?)d(kj?)
帶回原式:
∑i=1n∑j=1md(ij)=∑i=1n∑j=1m∑k∣i,k∣jμ(k)d(ik)d(jk)=∑kμ(k)∑k∣in∑k∣jmd(ik)d(jk)=∑kμ(k)∑i=1?nk?∑j=1?mk?d(i)d(j)=∑kμ(k)(∑i=1?nk?d(i))?(∑j=1?mk?d(j))\sum_{i=1}^n\sum_{j=1}^md(ij)=\sum_{i=1}^n\sum_{j=1}^m\sum_{k|i,k|j}\mu(k)d(\frac{i}{k})d(\frac{j}{k})\\=\sum_{k}\mu(k)\sum_{k|i}^n\sum_{k|j}^md(\frac i k)d(\frac j k)\\=\sum_k\mu(k)\sum_{i=1}^{\lfloor\frac n k\rfloor}\sum_{j=1}^{\lfloor\frac m k\rfloor}d(i)d(j)\\=\sum_k\mu(k)(\sum_{i=1}^{\lfloor\frac n k\rfloor}d(i))\cdot(\sum_{j=1}^{\lfloor\frac m k\rfloor}d(j))i=1n?j=1m?d(ij)=i=1n?j=1m?ki,kj?μ(k)d(ki?)d(kj?)=k?μ(k)kin?kjm?d(ki?)d(kj?)=k?μ(k)i=1?kn???j=1?km???d(i)d(j)=k?μ(k)(i=1?kn???d(i))?(j=1?km???d(j))
線性篩出 μ,d\mu,dμ,d,預處理出前綴和,整除分塊即可。

代碼

#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define debug(...) fprintf(stderr,__VA_ARGS__) inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f; } const int N=1e5+100; int n,m;int p[N],tot,vis[N],mu[N],msum[N],d[N]; ll dsum[N]; void init(int n){mu[1]=1;d[1]=1;for(int i=2;i<=n;i++){if(!vis[i]) p[++tot]=i,mu[i]=-1,d[i]=2;for(int j=1;j<=tot&&p[j]<=n/i;j++){vis[i*p[j]]=1;if(i%p[j]==0){mu[i*p[j]]=0;d[i*p[j]]=d[i]+d[i]-d[i/p[j]];break;}mu[i*p[j]]=-mu[i];d[i*p[j]]=d[i]*2;}}for(int i=1;i<=n;i++){msum[i]=msum[i-1]+mu[i];dsum[i]=dsum[i-1]+d[i];}return; }signed main() { #ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout); #endifinit(5e4);int T=read();while(T--){n=read();m=read();ll ans(0);for(int l=1,r;l<=min(n,m);l=r+1){r=min(n/(n/l),m/(m/l));ans+=(msum[r]-msum[l-1])*dsum[n/l]*dsum[m/l];}printf("%lld\n",ans);}return 0; } /* 5 5 8 1 46 3564 */

總結

以上是生活随笔為你收集整理的洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。