HDU 6390 GuGuFishtion
题意:
计算:
\]
思路:
考虑算术基本定理和\(\varphi(x)\)函数积性将式子化简:
令\(a = p_1^{t_1}p_2^{t_2} \cdots p_n^{t_n}\),\(b = p_1^{q_1}p_2^{q_2} \cdots p_n^{q_n}\)。
那么原式有:
\frac{\varphi(ab)}{\varphi(a)\varphi(b)} (\bmod p) = \frac{\varphi(p_1^{t_1 + q_1} \cdots p_n^{t_n + q_n})}{\varphi(p_1^{t_1} \cdots \varphi(p_n^{t_n})) \cdot \varphi(p_1^{q_1} \cdots p_n^{q_n})} (\bmod p)
\end{eqnarray*}
\]
我们单独考虑一下\(p_1\),那么有:
\frac{\varphi(p_1^{t_1 + q_1})}{\varphi(p_1^{t_1}) \cdot \varphi(p_1^{q_1})} = \frac{p_1^{t_1 + q_1} \cdot (1 - \frac{1}{p_1})} {p_1^{t_1} (1 - \frac{1}{p_1})\cdot p_1^{q_1}(1 - \frac{1}{p_1})}
\end{eqnarray*}
\]
我们令\(t_1 < p_1\),即\(p_1^{t_1}是gcd(a, b)\)的一部分,那么约分之后有:
\frac{p_1^{t_1}}{p_1^{t_1} (1 - \frac{1}{p_1})}
\end{eqnarray*}
\]
我们再同理考虑\(p_1 \cdots p_n\),我们发现分子刚好是\(gcd(a, b)\), 而分母是\(\varphi(gcd(a, b))\),即:
\frac{\varphi(ab)}{\varphi(a)\varphi(b)} (\bmod p) &=& \frac{\varphi(p_1^{t_1 + q_1} \cdots p_n^{t_n + q_n})}{\varphi(p_1^{t_1} \cdots \varphi(p_n^{t_n})) \cdot \varphi(p_1^{q_1} \cdots p_n^{q_n})} (\bmod p) \\
&=& \frac{gcd(a, b)}{\varphi(gcd(a, b))}
\end{eqnarray*}
\]
所以现在我们的问题转化成了求解:
\sum\limits_{a = 1}^{m}\sum\limits_{b = 1}^{n} \frac{gcd(a, b)}{\varphi(gcd(a, b))} (\bmod p)
\end{eqnarray*}
\]
令\(gcd(a, b) = d\),并且令\(n <= m\),有:
\sum\limits_{a = 1}^{m} \sum\limits_{b = 1}^{n} \frac{d}{\varphi(d)} = \sum\limits_{d = 1}^{n} d \cdot \varphi(d)^{-1} \sum\limits_{a = 1}^{n} \sum\limits_{b = 1}^{m} [gcd(a, b) == d] \\
\end{eqnarray*}
\]
我们令:
f(d) &=& \sum\limits_{a = 1}^{n} \sum\limits_{b = 1}^{m} [gcd(a, b) == d] \\
g(d) &=& \sum\limits_{d|x}f(x) \\
&=& \sum\limits_{a = 1}^{n} \sum\limits_{b = 1}^{m} [d | gcd(a, b)] \\
&=& \sum\limits_{a = 1}^{n/d}\sum\limits_{b = 1}^{m/d} [1 | gcd(a, b)] \\
&=& \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor
\end{eqnarray*}
\]
进行莫比乌斯反演,有:
f(d) &=& \sum\limits_{d|x} \mu(\frac{x}{d}) g(d) \\
&=& \sum\limits_{d|x} \mu(\frac{x}{d}) \cdot \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor \\
&=& \sum\limits_{x = 1}^{n/d} \mu(x) \cdot \lfloor \frac{n}{xd} \rfloor \lfloor \frac{m}{xd} \rfloor \\
\end{eqnarray*}
\]
所以,原式为:
\sum\limits_{i = 1}^{n} i \cdot \varphi(i)^{-1} \sum\limits_{d = 1}^{n|i} \mu(d) \lfloor \frac{n}{id} \rfloor \lfloor \frac{m}{id} \rfloor
\end{eqnarray*}
\]
预处理逆元,\(\varphi()\)函数,\(\mu()\)函数,然后直接算即可。
复杂度为\(\sum\limits_{i = 1}^{n} \sqrt{(i)}\)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000010
ll p;
int n, m;
int prime[N], mu[N];
int phi[N], inv[N], g[N];
bool check[N];
void init()
{
memset(check, 0, sizeof check);
prime[0] = 0;
phi[1] = 1;
mu[1] = 1;
for (int i = 2; i < N; ++i)
{
if (!check[i])
{
prime[++prime[0]] = i;
phi[i] = i - 1;
mu[i] = -1;
}
for (int j = 1; j <= prime[0]; ++j)
{
if (1ll * i * prime[j] >= N)
break;
check[i * prime[j]] = 1;
if (i % prime[j] == 0)
{
phi[i * prime[j]] = phi[i] * prime[j];
mu[i * prime[j]] = 0;
break;
}
else
{
phi[i * prime[j]] = phi[i] * (prime[j] - 1);
mu[i * prime[j]] = -mu[i];
}
}
}
}
void work()
{
inv[1] = 1;
for (int i = 2; i <= n; ++i)
inv[i] = 1ll * inv[p % i] * (p - p / i) % p;
for (int i = 1; i <= n; ++i)
g[i] = 1ll * i * inv[phi[i]] % p;
}
ll get(int n, int m)
{
ll res = 0;
for (int i = 1; i <= n; ++i)
res = (res + 1ll * mu[i] * (n / i) * (m / i)) % p;
return res;
}
int main()
{
init();
int T; cin >> T;
while (T--)
{
scanf("%d %d %lld\n", &n, &m, &p);
if (n > m) swap(n, m);
work();
ll res = 0;
for (int i = 1; i <= n; ++i)
res = (res + g[i] * get(n / i, m / i)) % p;
printf("%lld\n", res);
}
return 0;
}
HDU 6390 GuGuFishtion的更多相关文章
- HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解
题意: 给定\(n,m,p\),求 \[\sum_{a=1}^n\sum_{b=1}^m\frac{\varphi(ab)}{\varphi(a)\varphi(b)}\mod p \] 思路: 由欧 ...
- hdu 6390 欧拉函数+容斥(莫比乌斯函数) GuGuFishtion
http://acm.hdu.edu.cn/showproblem.php?pid=6390 题意:求一个式子 题解:看题解,写代码 第一行就看不出来,后面的sigma公式也不会化简.mobius也不 ...
- GuGuFishtion HDU - 6390 (欧拉函数,容斥)
GuGuFishtion \[ Time Limit: 1500 ms\quad Memory Limit: 65536 kB \] 题意 给出定义\(Gu(a, b) = \frac{\phi(ab ...
- GuGuFishtion HDU - 6390 (杭电多校7E)
啊啊啊啊...全在纸上 字丑...算了算了 然后除法部分都用逆元就好了 还有逆元打表....学到了...牛逼 #include<map> #include<set> #incl ...
- HDU 6390
GuGuFishtion Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu GuGuFishtion 6390 数论 欧拉函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6390 直接开始证明: 我们设…………………………………….....…...............………… ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
随机推荐
- JPEG图片扩展信息读取与修改
extends:http://www.2cto.com/kf/201405/303813.html 读写均是键值对的方式,需要注意的是值的类型需要严格按照api定义格式. 支持读写节点为: 1.TAG ...
- “找女神要QQ号码”——java篇
题目就是这样的: 给了一串数字(不是QQ号码),根据下面规则可以找出QQ号码: 首先删除第一个数,紧接着将第二个数放到这串数字的末尾,再将第三个数删除,并将第四个数放到这串数字的末尾...... 如此 ...
- POJ--1936 All in All(水题,暴力即可)
All in All Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 30543 Accepted: 12723 Descript ...
- POJ--1050--To the Max(线性动规,最大子矩阵和)
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44723 Accepted: 23679 Descript ...
- iOS多线程编程之GCD介绍(转载)
一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提 ...
- java web启动后执行初始化任务
写一个类继承ApplicationListener,可以直接引用下述代码,然后调用相应的方法. package com.linewell.system; import com.linewell.cac ...
- LightOj 1265 - Island of Survival(概率)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1265 题目大意:有一个生存游戏,里面t只老虎,d只鹿,还有一个人,每天都要有两个生物碰 ...
- 洛谷P4438 道路 [HNOI/AHOI2018] 树形dp
正解:树形dp 解题报告: 传送门! 昂首先看懂题目趴QwQ大概就是说有棵满二叉树,有n个叶子节点(乡村)和n-1个非叶子节点,然后这棵树的每个节点有三个属性abc,对每个非叶子节点可以从与子节点的两 ...
- div+css网页标准布局实例教程(三)
前边两节学完后,前台工作基本上完成了,下边的任务该程序员添加程序了.为什么说是基本完成呢?因为要做的工作还很多,不但要把首页做出来,其它的列表页详细页等页面也得做.还要配合程序员把整个网站完成,这样才 ...
- Shell中的表达式及IF
#!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...