GuGuFishtion(2018 Multi-University Training Contest 7)

GuGuFishtion

推式子

∑a=1m∑b=1nϕ(a,b)ϕ(a)ϕ(b)=∑a=1m∑b=1ngcd(a,b)ϕ(gcd(a,b))=∑d=1mdϕ(d)∑a=1md∑b=1mdgcd(a,b)==1=∑d=1mdϕ(d)∑a=1md∑b=1md∑k∣gcd(a,b)μ(k)我们约定n,m,满足n<m=∑d=1ndϕ(d)∑k=1ndμ(k)⌊nkd⌋⌊mkd⌋\sum_{a = 1 } ^{m} \sum_{b = 1 } ^{n} \frac{\phi(a, b)}{\phi(a) \phi(b)}\\ = \sum_{a = 1} ^{m} \sum_{b = 1} ^{n} \frac{gcd(a, b)}{\phi(gcd(a, b))}\\ = \sum_{d = 1} ^{m} \frac{d}{\phi(d)} \sum_{a = 1} ^{\frac{m}{d}} \sum_{b = 1} ^{\frac{m}{d}} gcd(a, b) == 1\\ = \sum_{d = 1} ^{m} \frac{d}{\phi(d)} \sum_{a = 1} ^{\frac{m}{d}} \sum_{b = 1} ^{\frac{m}{d}} \sum_{k \mid gcd(a, b)} \mu(k)\\ 我们约定n, m,满足 n < m\\ = \sum_{d = 1} ^{n} \frac{d}{\phi(d)} \sum_{k = 1} ^{\frac{n}{d}} \mu(k) \lfloor\frac{n}{kd}\rfloor \lfloor \frac{m}{kd} \rfloor\\ a=1mb=1nϕ(a)ϕ(b)ϕ(a,b)=a=1mb=1nϕ(gcd(a,b))gcd(a,b)=d=1mϕ(d)da=1dmb=1dmgcd(a,b)==1=d=1mϕ(d)da=1dmb=1dmkgcd(a,b)μ(k)n,mn<m=d=1nϕ(d)dk=1dnμ(k)kdnkdm

接下来我们只要筛选出前1e61e61e6个数的ϕandμ\phi \ and\ \muϕ and μ,再通过两次数论分块即可整体复杂度是O(nn)=O(n)。O(\sqrt n\sqrt n )= O(n)。O(nn)=O(n)

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 1e6 + 10;int prime[N], cnt;int phi[N], mu[N], inv[N], sum[N], n, m, mod;bool st[N];void init() {phi[1] = mu[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;mu[i] = -1;phi[i] = i - 1;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}mu[i * prime[j]] = -mu[i];phi[i * prime[j]] = phi[i] * (prime[j] - 1);}}for(int i = 1; i < N; i++) {mu[i] += mu[i - 1];}
}ll calc(ll n, ll m) {ll ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = min(n / (n / l), m / (m / l));ans = (ans + (mu[r] - mu[l - 1]) * (n / l) % mod * (m / l) % mod) % mod;}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T = read();while(T--) {n = read(), m = read(), mod = read();if(n > m) swap(n, m);inv[1] = 1;for(int i = 2; i < N; i++) {inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;}for(int i = 1; i < N; i++) {sum[i] = (sum[i - 1] + 1ll * i * inv[phi[i]] % mod) % mod;}ll ans = 0;for(int l = 1, r; l <= n; l = r + 1) {r = min(n / (n / l), m / (m / l));ll temp = calc(n / l, m / l);ans = (ans + (sum[r] - sum[l - 1] + mod) % mod * calc(n / l, m / l) % mod) % mod;}printf("%lld\n", ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奇淫巧技-Flutter调用C#

前言众所周知&#xff0c;Xamarin应该是.net下的跨平台开发工具。2016年之前还处于收费状态&#xff0c;后被微软收购后开源。但似乎有个现象&#xff0c;开源后的Xamarin发展似乎有些停滞&#xff0c;而且维护Xamarin的团队又很固执不愿变通。社区多次建议UI层应该统一绘图引擎…

【UOJ#33】【UR #2】树上GCD(长链剖分/根号分类讨论)

【UOJ#33】【UR #2】树上GCD 求解树上两个点到lca的距离的最大公约数是k的对数 首先我们很容易就想到莫比乌斯反演&#xff0c;那么利用倍数形式&#xff0c;我们只需要求解是i的倍数的对数。 考虑枚举lca&#xff0c;这个问题就和深度有关&#xff0c;那么可以长链剖分&…

.NET World——gPRC概览

官方的定义&#xff1a;gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authen…

51NOD 1220 约数之和(杜教筛)

1220 约数之和 推式子 ∑i1n∑j1nd(i,j)∑i1n∑j1n∑x∣i∑y∣j(gcd(x,y)1)xjy∑d1ndμ(d)∑i1nd∑x∣iix∑j1nd∑y∣jj∑d1ndμ(d)(∑i1nd∑x∣ix)2∑d1ndμ(d)(∑x1nx∑x∣i)2∑d1ndμ(d)(∑x1nxnx)2接下来就是杜教筛求dμ(d)的前缀和&#xff0c;然后再直接分块求∑x1nxnx&…

P4151 [WC2011]最大XOR和路径(线性基)

P4151 [WC2011]最大XOR和路径 对于求解最大异或和路径&#xff0c;首先边可以重复走&#xff0c;最终的结果一定是一条路径和许多环的异或和&#xff0c;因为路径和环之间的边会被走两次&#xff0c;不会被计算&#xff0c;所以我们可以通过dfs树求解所有的环的线性基&#xf…

P6222 「P6156 简单题」(反演 + 积性函数线性筛)

P6156 简单题 推式子 ∑i1n∑j1n(ij)kf(gcd(i,j))gcd(i,j)∑i1n∑j1n(ij)kμ2(gcd(i,j))gcd(i,j)∑d1nμ2(d)dk1∑i1nd∑j1nd(ij)k(gcd(i,j)1)∑d1nμ2(d)dk1∑p1ndp2μ(p)∑i1npd∑j1npd(ij)ktpd,f(n)∑i1n∑j1n(ij)k∑t1nf(nt)tk∑d∣tμ2(d)μ(td)d\sum_{i 1} ^{n} \sum_{…

推荐高质量的公众号,值得跟进学习!

为大家推荐几个高质量的公众号&#xff1a;当你迷茫的时候刷刷这些大公司的牛人所运营的公众号&#xff0c;就可以知道自己的不足&#xff0c;不是仅仅局限于.NET技术之下&#xff0c;通过他们扩展我们的知识宽度&#xff0c;我们可以一起来学习。人工智能爱好者社区专注人工智…

P3733 [HAOI2017]八纵八横(线性基/线段树分治)

P3733 [HAOI2017]八纵八横 这是那道线性基的加强版&#xff0c;现在要求从1节点出发的一条路径异或和最大&#xff0c;并且还要支持修改权值和加边删边。 我们可以直接线段树分治然后将所有修改用vector存下来&#xff0c;然后最后dfs一遍整个线段树&#xff0c;然后每次类似…

.net core redis的全套操作

Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08;列表&#xff09;&#xff0c;set&#xff08;集合&#xff09;及zset(sorted set&#xff1a;有序集合)。Redis支持主从同步…

二次剩余模板

二次剩余模板 x2≡n(modp)x ^ 2 \equiv n \pmod px2≡n(modp) /*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc.h>#define mp make_pair #define pb push_back #define endl \n #define mid (l r >> 1) #define l…

CF938G Shortest Path Queries(线性基/线段树分治/异或)

CF938G Shortest Path Queries 支持加边删边和查询两点之间的异或最短路&#xff0c;我们可以使用线段树分治&#xff0c;然后利用线性基求解。 但是这里图可能不是联通的&#xff0c;所以查询两点之间的异或和需要边带权并查集维护&#xff0c;然后还不能路径压缩&#xff0…

Stack Overflow引入CROKAGE,搜问题不用再东拼西凑

许多开发者使用 Stack Overflow 搜索开发中遇到的问题&#xff0c;有时候需要查询的结果中有通俗的讲解&#xff0c;而且最好还能够带上代码 demo&#xff0c;但是两者同时很完美地满足要求还是比较困难的。不过最近 Stack Overflow 官方博客上介绍了一种智能化的技术&#xff…

P2487 [SDOI2011]拦截导弹(cdq分治/计数问题思想)

P2487 [SDOI2011]拦截导弹 求解二维上的LIS&#xff0c;并且要求出每个点的选中概率。 首先对于每个点的选中概率&#xff0c;可以通过方案数计算&#xff0c;那么就是选中它的方案数除以总方案数。关键在于选中它的方案数怎么求&#xff0c;可以通过以它开头的LIS方案数和以…

dsu on tree 题集 + ac代码

文章目录**入门讲解****[600E - Lomsat gelral](https://codeforces.ml/problemset/problem/600/E)****[树上数颜色](https://www.luogu.org/problemnew/show/U41492)****[570D - Tree Requests](https://codeforces.ml/problemset/problem/570/D)****[ 阔力梯的树](https://ac…

使用Kubectl部署应用

目录 使用Kubectl部署应用 Kubectl部署流程 部署一个简单的Demo网站 使用Kubectl部署应用一旦运行了Kubernetes集群&#xff0c;就可以在其上部署容器化应用程序。因此在开始之前&#xff0c;我们需要先确保集群已经准备就绪&#xff0c;无论是使用Minikube还是kubeadm创建的集…

SP22343 NORMA2 - Norma(分治优化复杂度)

SP22343 NORMA2 - Norma 一看就像是一个序列分治的题目&#xff0c;求解序列上区间长度乘区间最大值最小值的和&#xff0c;然后考虑如何处理&#xff0c;分治之后每次就可以将右边部分分成三部分&#xff0c;然后对于这三部分可以批量求和&#xff0c;这样就起到优化复杂度的…

Docker系列之.NET Core入门(三)

在Docker生态系统中除了上一节所讲解的基本概念&#xff0c;还有其他专业术语&#xff0c;本文我们将一笔带过&#xff0c;同时会开始陆续进入到在.NET Core中使用Docker。专业术语Docker Engine&#xff08;Docker引擎&#xff09;&#xff1a;客户端 - 服务器应用程序。Docke…

P3911 最小公倍数之和 (atcoder C - LCMs)(反演)

P3911 最小公倍数之和 推式子 ∑i1n∑j1nlcm(ai,aj)下面的nmax(ai)&#xff0c;ci为i在原数组中出现的次数∑i1n∑j1nijgcd(ij)cicj∑d1n1d∑i1n∑j1nijcicj(gcd(i,j)d)∑d1nd∑i1nd∑j1ndijcidcjd∑k∣gcd(i,j)μ(k)∑d1nd∑k1ndμ(k)k2∑i1nkd∑j1nkdijcikdcjkd∑t1nt(∑i1n…

P5502 [JSOI2015]最大公约数(gcd性质/min性质/分治)

P5502 [JSOI2015]最大公约数 对于求解(r-l1)*gcd(l,r)的最大值&#xff0c;首先我们有一个性质&#xff0c;就是一个前缀的gcd本质不同个数只有log个&#xff0c;所以我们可以利用这个性质&#xff0c;然后每次分治处理&#xff0c;每一层的复杂度可以做到O(n)因为枚举前缀后缀…

2019南昌网络赛G. tsy‘s number(反演 + 积性函数O(n)预处理)

tsy’s number 推式子 ∑i1n∑j1n∑k1nϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(k)ϕ(gcd(i,j,k))我们假定jp1k1p2k2p3p3……pnkn&#xff0c;有ϕ(j)p1k1−1(p1−1)p2k2−1(p2−1)p3k3−1(p3−1)……pnkn−1(pn−1)&#xff0c;ϕ(j2)p12k1−1(p1−1)p22k2−1(p2−1)p32k3−1(p3−1)……