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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

除了最后一題都比較簡單就寫一起了


P4450-雙親數

題目鏈接:https://www.luogu.com.cn/problem/P4450

題目大意

給出A,B,dA,B,dA,B,d求有多少對(a,b)(a,b)(a,b)滿足gcd(a,b)=dgcd(a,b)=dgcd(a,b)=da∈[1,A],b∈[1,B]a\in[1,A],b\in[1,B]a[1,A],b[1,B]

解題思路

很顯然的容斥,枚舉ddd的倍數iii,然后容斥系數就是μ(id)\mu(\frac{i}ozvdkddzhkzd)μ(di?)
時間復雜度O(n)O(n)O(n)

code

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e6+10; int A,B,d,mu[N],pri[N],cnt; long long ans; bool v[N]; int main() {scanf("%d%d%d",&A,&B,&d);mu[1]=1;for(int i=2;i<N;i++){if(!v[i])pri[++cnt]=i,mu[i]=-1;for(int j=1;j<=cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;mu[i*pri[j]]=-mu[i];}}if(A>B)swap(A,B);for(int i=d;i<=A;i+=d)ans+=1ll*(A/i)*(B/i)*mu[i/d];printf("%lld\n",ans); }

P5221-Product

題目鏈接:https://www.luogu.com.cn/problem/P5221

題目大意

給出nnn
∏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=1n?j=1n?gcd(i,j)lcm(i,j)?

解題思路

CYJian\text{CYJian}CYJian的題啊,時限0.2s?0.2s?0.2s?不過只是看起來花里胡哨,沒有其他CYJian\text{CYJian}CYJian的題那么難。

先簡單把lcmlcmlcm拆出來化一下式子
(∏i=1n∏j=1ni×j)1(∏i=1n∏j=1ngcd(i,j))2\left(\prod_{i=1}^n\prod_{j=1}^ni\times j\right)\frac{1}{\left(\prod_{i=1}^{n}\prod_{j=1}^ngcd(i,j)\right)^2}(i=1n?j=1n?i×j)(i=1n?j=1n?gcd(i,j))21?

左邊那個很容易求就是(n!)2n(n!)^{2n}(n!)2n,右邊那個因為是乘積所以很好做,直接枚舉質數冪ded^ede,讓有?nde?2\lfloor\frac{n}{d^e}\rfloor^2?den??2對數的gcdgcdgcd包含ded^ede,會產生這么多的貢獻,但是因為在de?1d^{e-1}de?1的時候也統計過一次,所以只需要產生ddd的貢獻就好了。

時間復雜度O(nlog?n)O(n\log n)O(nlogn)

code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=1e6+10,P=104857601; ll n,ans,cnt,pri[N]; bool v[N]; ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans; } signed main() {scanf("%lld",&n);ans=1;for(ll i=2;i<=n;i++){if(!v[i]){for(ll j=i;j<=n;j=j*i)ans=ans*power(i,(n/j)*(n/j)%(P-1))%P;pri[++cnt]=i;}for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;}}ans=power(ans*ans%P,P-2);ll f=1;for(ll i=1;i<=n;i++)f=f*i%P;f=power(f,2*n);ans=ans*f%P;printf("%lld",ans);return 0; }

P6055-[RC-02]GCD

題目鏈接:https://www.luogu.com.cn/problem/P6055

題目大意

給出nnn
∑i=1n∑j=1n∑p=1?nj?∑q=1?nj?[gcd(i,j)=1][gcd(p,q)=1]\sum_{i=1}^n\sum_{j=1}^n\sum_{p=1}^{\lfloor\frac{n}{j}\rfloor}\sum_{q=1}^{\lfloor\frac{n}{j}\rfloor}[gcd(i,j)=1][gcd(p,q)=1]i=1n?j=1n?p=1?jn???q=1?jn???[gcd(i,j)=1][gcd(p,q)=1]

解題思路

剛開始還以為可以直接暴力整除分塊+杜教篩歐拉函數然后O(n34)O(n^{\frac{3}{4}})O(n43?)搞,然后發現時限是1s1s1s

發現這個式子的順序很奇怪,特意的把jjj放在了里面。這個提示我們jjj其實是在枚舉pppqqqgcdgcdgcd
而又jjjiii互質,其實這個式子的真正目的是對于每個iii求有多少對數的gcdgcdgcdiii互質然后求和。換成式子就是
∑i=1n∑q=1n∑p=1n[gcd(gcd(q,p),i)=1]\sum_{i=1}^n\sum_{q=1}^n\sum_{p=1}^n[gcd(gcd(q,p),i)=1]i=1n?q=1n?p=1n?[gcd(gcd(q,p),i)=1]
就是三對數之間互質的對數,之間上莫反就可以了
∑i=1n?ni?3μ(i)\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor^3\mu(i)i=1n??in??3μ(i)
nnn比較大,要用杜教篩篩一下mumumu

時間復雜度O(n23)O(n^{\frac{2}{3}})O(n32?)


code

#include<cstdio> #include<cstring> #include<algorithm> #include<map> #define ll long long using namespace std; const ll N=1e7+10,P=998244353; ll n,cnt,pri[N],mu[N],ans; map<ll,ll> mp; bool v[N]; ll get_sum(ll n){if(mp.find(n)!=mp.end())return mp[n];if(n<N)return mu[n];ll rest=1;for(ll l=2,r;l<=n;l=r+1)r=n/(n/l),(rest+=P-(r-l+1)*get_sum(n/l))%=P;return mp[n]=rest; } signed main() {scanf("%lld",&n);mu[1]=1;for(ll i=2;i<N;i++){if(!v[i])pri[++cnt]=i,mu[i]=-1;for(ll j=1;j<=cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;mu[i*pri[j]]=-mu[i];}}for(ll i=1;i<N;i++)(mu[i]+=mu[i-1])%=P;for(ll l=1,r;l<=n;l=r+1){r=n/(n/l);ll p=n/l;p=p*p%P*p%P;(ans+=p*(get_sum(r)-get_sum(l-1))%P)%=P;}printf("%lld\n",(ans+P)%P);return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】的全部內容,希望文章能夠幫你解決所遇到的問題。

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