题目大意:

给定m n p 求下式

 

题解:https://blog.csdn.net/codeswarrior/article/details/81700226

莫比乌斯讲解:https://www.cnblogs.com/peng-ym/p/8647856.html

莫比乌斯的mu[]:https://www.cnblogs.com/cjyyb/p/7953803.html

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
const int N=1e6+; LL mu[N], phi[N];
LL inv[N]; int n,m,p; void initinv() {
inv[]=;
for(int i=;i<N;i++)
inv[i]=inv[p%i]*(LL)(p-p/i)%p;
} // 逆元
void init() {
for(int i=;i<N;i++) phi[i]=i;
for(int i=;i<N;i++)
if(i==phi[i]) {
for(int j=i;j<N;j+=i)
phi[j]=phi[j]/i*(i-);
}
mem(mu,); mu[]=;
for(int i=;i<N;i++)
for(int j=i*;j<N;j+=i)
mu[j]-=mu[i];
} // 欧拉 莫比乌斯 LL moblus(int a,int b,int g) {
LL res=; a/=g,b/=g;
/// gcd(1~a,1~b)=g -> gcd(1~a/g,1~b/g)=1
for(int i=;i<=min(a,b);i++)
res+=(LL)mu[i]*(a/i)*(b/i);
/// mu[i] * (1~a,1~b)中[gcd=g或g的倍数]的数量
return res;
} int main()
{
init();
int t; scanf("%d",&t);
while(t--) {
scanf("%d%d%d",&m,&n,&p);
LL ans=; initinv();
for(int i=;i<=min(m,n);i++) {
LL uF=moblus(n,m,i)%p;
ans=(ans+uF*i%p*inv[phi[i]]%p)%p;
}
printf("%lld\n",ans);
} return ;
}

最新文章

  1. rsa互通密钥对生成及互通加解密(c#,java,php)
  2. SSM 三大框架整合
  3. 如何删除或重置spfile中的参数
  4. ASP.NET发布后,功能不响应
  5. JS对URL字符串进行编码/解码分析
  6. 基于RESTful标准的Web Api
  7. JDBC的基本步骤
  8. 空格和TAB键混用错误:IndentationError: unindent does not match any outer indentation level
  9. Android开发之Java必备基础
  10. 6、android开发中遇到的bug整理
  11. 在Cubieboard上关闭irqbalance服务避免内存泄漏
  12. 《APUE》第五章练习1
  13. XSS脚本攻击漫谈
  14. Azure VM对远程桌面登录的支持-示例
  15. sift算法c语言实现
  16. android 中的ExpandableListView取消一级图标
  17. SOFA 源码分析 —— 服务发布过程
  18. Uncaught TypeError: Cannot read property ‘split’ of undefined
  19. readfile() file_get_content f
  20. 2018-2019-20175334实验一《Java开发环境的熟悉》实验报告

热门文章

  1. Windows XP 下如何使用Qt Creator中的Git版本控制功能
  2. springboot多数据库及分布式事务配置
  3. SQL中的DDL、DML、DCL、TCL
  4. Python之字典推导式
  5. Apache Solr远程命令执行
  6. Transformer 学习
  7. shell script 学习
  8. 写MySQL存储过程实现动态执行SQL
  9. 代理端口转发工具rinetd
  10. 在CMake中启用VS2017的C++17特性