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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷【P2257】YY的GCD

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷【P2257】YY的GCD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)為質數的(x, y)有多少對

做的第一道莫比烏斯反演的題目有點...難啊,還沒學會 待更
F(n)表示的是gcd(i,j)=n或為n的倍數的個數,那么我們再求解F(n)時顯然是要枚舉它的倍數
所以就是n|d,即枚舉d為n的倍數

// 要設 F(n)= gcd(x,y)=n或者是n的倍數,個數為多少,
看:https://www.cnblogs.com/peng-ym/p/8652288.html

?

#include<bits/stdc++.h> #define N 10000100 typedef long long ll; const int maxn=10000000; using namespace std; ll g[maxn]; ll sum[maxn]; bool check[maxn]; ll mu[maxn]; ll prim[maxn]; int cnt=0; using namespace std; inline void read(int &x) {x=0;static int p;p=1;static char c;c=getchar();while(!isdigit(c)){if(c=='-')p=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+(c-48);c=getchar();}x*=p; } inline void print(long long x) {static int cnt;static int a[15];cnt=0;do{a[++cnt]=x%10;x/=10;}while(x);for(int i=cnt;i>=1;i--)putchar(a[i]+'0');puts(""); } bool vis[N]; void get_mu(int n) {mu[1]=1;for(int i=2;i<=n;i++){if(!vis[i]){mu[i]=-1;prim[++cnt]=i;}for(int j=1;j<=cnt&&prim[j]*i<=n;j++){vis[i*prim[j]]=1;if(i%prim[j]==0)break;else mu[prim[j]*i]=-mu[i];}}for(int j=1;j<=cnt;j++)for(int i=1;i*prim[j]<=n;i++)g[i*prim[j]]+=mu[i];for(int i=1;i<=n;i++)sum[i]=sum[i-1]+(long long)g[i]; } int n,m; int main() {int t;read(t);get_mu(10000000);while(t--){read(n);read(m);if(n>m)swap(n,m);static long long ans;ans=0;for(int l=1,r;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));ans+=1ll*(n/l)*(m/l)*(sum[r]-sum[l-1]);}cout<<ans<<endl;}return 0; }

?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的洛谷【P2257】YY的GCD的全部內容,希望文章能夠幫你解決所遇到的問題。

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