莫比乌斯反演 + 欧拉函数

由 Gu(a,b) = \(\frac{\phi(ab) }{\phi (a)*\phi(b)}\)

可以推出 Gu(a, b) = \(\frac{gcd(a,b))}{\phi (gcd(a,b))}\)

然后这个东西用莫比乌斯反演,预处理前缀和值域分块求。。。

网上貌似很多题解不用分块也AC了,但是我不用就T orz

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define full(a, b) memset(a, b, sizeof a)
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
inline int lowbit(int x){ return x & (-x); }
inline ll read(){ll X = 0, w = 0; char ch = 0;while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();return w ? -X : X;
}
inline int gcd(int a, int b){ return b ? gcd(b, a % b) : a; }
inline int lcm(int a, int b){ return a / gcd(a, b) * b; }
template<typename T>
inline T max(T x, T y, T z){ return max(max(x, y), z); }
template<typename T>
inline T min(T x, T y, T z){ return min(min(x, y), z); }
template<typename A, typename B, typename C>
inline A fpow(A x, B p, C lyd){A ans = 1;for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd;return ans;
}
const int N = 1000005;
int _, m, n, p, tot;
ll inv[N], prime[N], mo[N], phi[N], sum[N];
bool vis[N];void sieve(){mo[1] = 1, phi[1] = 1;for(int i = 2; i <= N; i ++){if(!vis[i]){prime[++tot] = i;mo[i] = -1, phi[i] = i - 1;}for(int j = 1; j <= tot && prime[j] * i <= N; j ++){vis[i * prime[j]] = true;if(i % prime[j] == 0){mo[i * prime[j]] = 0;phi[i * prime[j]] = phi[i] * prime[j];break;}else{mo[i * prime[j]] = -mo[i];phi[i * prime[j]] = phi[i] * phi[prime[j]];}}}for(int i = 1; i <= N; i ++){sum[i] = sum[i - 1] + mo[i];}
}ll calc(int x, int y){ll ret = 0;for(int l = 1, r; l <= min(x, y); l = r + 1){r = min(x / (x / l), y / (y / l));ret = (ret % p + (1LL * (x / l) * (y / l) % p * (sum[r] - sum[l - 1]) % p) % p) % p;}return ret;
}int main(){sieve();for(_ = read(); _; _ --){m = read(), n = read(), p = read();if(n > m) swap(n, m);inv[1] = 1;for(int i = 2; i <= n; i ++)inv[i] = (p - p / i) * inv[p % i] % p;ll ans = 0;for(int i = 1; i <= min(n, m); i ++){ans = (ans % p + (1LL * i * inv[phi[i]] % p * calc(m / i, n / i)) % p) % p;}printf("%lld\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/onionQAQ/p/10967652.html

2018 Multi-University Training Contest 7 - GuGuFishtion相关推荐

  1. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

  2. 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...

  3. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  4. 2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18))

    2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18)) 题目 A B C D E ...

  5. 2018 Multi-University Training Contest 7 Age of Moyu

    Age of Moyu 来追梦 Problem Description Mr.Quin love fishes so much and Mr.Quin's city has a nautical sy ...

  6. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

  7. HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2

    /* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意: ...

  8. HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3

    /* HDU 6058 - Kanade's sum [ 思维,链表 ] | 2017 Multi-University Training Contest 3 题意:给出排列 a[N],求所有区间的第 ...

  9. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  10. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

最新文章

  1. R语言set.seed函数的意义及实战
  2. mysql表文件被删_mysql表物理文件被误删的解决方法
  3. mysql怎么实现确认收货_Tp结合redis实现订单自动收货
  4. 详解布局之--静态、自适应、流式、响应式
  5. 让你在职场游刃有余的10句话
  6. 几种常用的键盘钩子技术
  7. Win10 如何配置JDK环境变量
  8. matlab 自适应遗传算法,自适应遗传算法MATLAB代码
  9. minigui 编译与使用
  10. $Loj10155$ 数字转换(求树的最长链) 树形$DP$
  11. 卡片机和单反机详细对比
  12. 服务器拷文件突然自动关机,windows server 2008R2自动关机解决方法
  13. 计算机网络WAN接口,网线插WAN口上不了网怎么办?
  14. Forecasting (一):introduction
  15. java 微博第三方登录_Connect/login - 微博API
  16. c 配置mysql字符串_mysql字符串属性实例学习
  17. appemit 支持chrome edge谷歌微软浏览器佳博Gprinter 标签打印机 TSCLIB.DLL 函数库使用说明
  18. 房子场景模型如何建造?看3D建模教程:3ds max、zbrush制作房子
  19. eclipse安装Ivy插件
  20. QPrompt:一款为视频创作者提供的自由开源的提词器

热门文章

  1. 仓库出租平台有哪些_日用品仓库出租哪家划算周到
  2. redis-hmmap-go
  3. 常用linux命令分组记录V1
  4. oracle 函数怎么个写法,Oracle表值函数的两种写法
  5. Oracle数据库内存使用情况分析查看
  6. IDEA将web项目打成war包
  7. file处理的一些内容
  8. DOM中cloneNode的使用之旅
  9. 重庆Uber优步司机奖励政策
  10. realsched.exe进程