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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

luogu P2257 YY的GCD

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

嘟嘟嘟

感覺這幾道數論題都差不多,但這到明顯是前幾道的升級版。
推了一大頓只能得60分,不得不看題解。
各位看這老哥的題解吧
我就是推到他用\(T\)換掉\(kd\)之前,然后枚舉\(T\)的。這個轉換確實想不出來啊。
還有最后一句,最終的式子
\[\sum_{T = 1} ^ {n} \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor * \sum_{k | T} \mu(\frac{T}{k}) (k \in prime)\]
他把后面的那個sum預處理了。令\(f(T) = \sum_{k | T} \mu(\frac{T}{k}) (k \in prime)\),由此可見,這個函數的自變量是\(T\),而預處理的時候是枚舉\(T\)的質因數累加得到\(f(T)\),跟埃氏篩法很像。

#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> #include<cctype> #include<vector> #include<stack> #include<queue> using namespace std; #define enter puts("") #define space putchar(' ') #define Mem(a, x) memset(a, x, sizeof(a)) #define rg register typedef long long ll; typedef double db; const int INF = 0x3f3f3f3f; const db eps = 1e-8; const int maxn = 1e7 + 5; inline ll read() {ll ans = 0;char ch = getchar(), last = ' ';while(!isdigit(ch)) last = ch, ch = getchar();while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();if(last == '-') ans = -ans;return ans; } inline void write(ll x) {if(x < 0) x = -x, putchar('-');if(x >= 10) write(x / 10);putchar(x % 10 + '0'); }int v[maxn], prm[maxn], mu[maxn]; ll f[maxn], sum[maxn]; void init() {mu[1] = 1;for(int i = 2; i < maxn; ++i){if(!v[i]) v[i] = i, prm[++prm[0]] = i, mu[i] = -1;for(int j = 1; j <= prm[0] && i * prm[j] < maxn; ++j){v[i * prm[j]] = prm[j];if(i % prm[j] == 0) {mu[i * prm[j]] = 0; break;}else mu[i * prm[j]] = -mu[i];}}for(int i = 1; i <= prm[0]; ++i)for(int j = 1; prm[i] * j < maxn; ++j)f[prm[i] * j] += mu[j];for(int i = 1; i < maxn; ++i) sum[i] = sum[i - 1] + f[i]; }ll solve(int n, int m) {int Min = min(n, m);ll ret = 0;for(int l = 1, r; l <= Min; l = r + 1){r = min(n / (n / l), m / (m / l));ret += (sum[r] - sum[l - 1]) * (n / l) * (m / l);}return ret; }int main() {init();int T = read();while(T--){ll n = read(), m = read();write(solve(n, m)), enter;}return 0; }

轉載于:https://www.cnblogs.com/mrclr/p/10112023.html

總結

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

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