莫比乌斯反演——hdu6390推公式
/*
首先要把原始化简成 k/phi[k] 的格式,然后把有关k的sigma提出来,
后面就是求gcd(i,j)==k的莫比乌斯反演
这里要用整除分块加下速
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 2000005
ll n,m,mod; bool vis[maxn+];
int prime[maxn+],mm,phi[maxn+],mu[maxn+],sum[maxn+];
void primes(){
phi[]=;mu[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){mu[i]=-;prime[++mm]=i;phi[i]=i-;}
for(int j=;j<=mm;j++){
if(i*prime[j]>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
phi[i*prime[j]]=phi[i]*prime[j],mu[i*prime[j]]=;
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-),mu[i*prime[j]]=-mu[i];
}
}
for(int i=;i<=maxn;i++)
sum[i]=sum[i-]+mu[i];
}
//处理i/phi[i]
ll x[maxn],inv[maxn];
void init(){
inv[]=inv[]=;
for(ll i=;i<=n;i++)
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for(ll i=;i<=n;i++)
x[i]=i*inv[phi[i]]%mod;
}
inline ll calc(ll i){//求莫比乌斯公式值
ll d1=n/i,d2=m/i,res=;
for(ll l=,r;l<=d1;l=r+){
r=min(d1/(d1/l),d2/(d2/l));
res=(res+(d1/l)*(d2/l)%mod*(sum[r]-sum[l-])%mod+mod)%mod;
} return res;
} int main(){
int t;
scanf("%d",&t);
primes();
while(t--){
scanf("%lld%lld%lld",&n,&m,&mod);
init();
ll ans=;
if(n>m)swap(n,m);
for(int i=;i<=n;i++)
ans=(ans+x[i]*calc(i)%mod+mod)%mod;
printf("%lld\n",ans);
}
return ;
}
莫比乌斯反演——hdu6390推公式的更多相关文章
- 【Luogu】P3327约数个数和(莫比乌斯反演+神奇数论公式)
题目链接 真TM是神奇数论公式. 注明:如无特殊说明我们的除法都是整数除法,向下取整的那种. 首先有个定理叫$d(ij)=\sum\limits_{i|n}{}\sum\limits_{j|m}{}( ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- P2257 YY的GCD(莫比乌斯反演)
第一次做莫比乌斯反演,推式子真是快乐的很啊(棒读) 前置 若函数\(F(n)\)和\(f(d)\)存在以下关系 \[ F(n)=\sum_{n|d}f(d) \] 则可以推出 \[ f(n)=\sum ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)
点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...
- bzoj 2005: [Noi2010]能量采集【莫比乌斯反演】
注意到k=gcd(x,y)-1,所以答案是 \[ 2*(\sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j))-n*m \] 去掉前面的乘和后面的减,用莫比乌斯反演来推,设n< ...
- 【51nod1678】lyk与gcd(莫比乌斯反演+枚举因数)
点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:单点修改,给定\(i\)求\(\sum_{j=1}^na_j[gcd(i,j)=1]\). 莫比乌斯反演 考虑推一推询问操作的式子: ...
- hdu1695 莫比乌斯反演
莫比乌斯反演:可参考论文:<POI XIV Stage.1 <Queries>解题报告By Kwc-Oliver> 求莫比乌斯函数mu[i]:(kuangbin模板) http ...
- 我也不知道什么是"莫比乌斯反演"和"杜教筛"
我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的 ...
- Bzoj2694/Bzoj4659:莫比乌斯反演
Bzoj2694/Bzoj4659:莫比乌斯反演 先上题面:首先看到这数据范围显然是反演了,然而第三个限制条件十分不可做.于是我们暂且无视他,大不了补集转化算完再减是吧. 于是我们有:这里我们定义:于 ...
随机推荐
- 二维码APP后台开发记录
先是搭建环境,我们采用spring4.2.1+hibernate5.0.1进行搭建,从官网上下载框架必用jar包. 在MyEclipse里,创建web项目,创建lib包,将相关jar包放入,别忘了my ...
- 关于使用AWS的centos
AWS的centos在版本上有些许不同. 当使用6代的时候,默认的登录用户是root 使用7代的系统,默认的登录用户是centos 否则登录不上去
- 34. Thread类的常用方法
1.构造方法 Thread() 分配新的 Thread 对象. Thread(String name) 分配新的 Thread 对象并指定线程名字 2.方法 1)setName(String nam ...
- 在vue中使用Element的message组件
在vue中使用Element的message组件 在vue文件中使用 this.$message({ message: "提示信息", type: "success&qu ...
- [原创] delphi Memo 滚动到底部/开始 [Delphi XE、Delphi 7]
以前控制Memo滚动到底部的操作: SendMessage(memo1.Handle,WM_VSCROLL,SB_BOTTOM,0); 或者 Memo1.SelLength:=Length(Memo1 ...
- AnalyticDB for PostgreSQL 6.0 新特性介绍
阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...
- Delphi提取EXE,DLL文件图标
//uses ShellAPIprocedure TForm1.Button1Click(Sender: TObject);var IconIndex:Word; h:hICON;begin Icon ...
- Dll注入技术之APC注入
APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下: 1)当EXE里某个线程执行到SleepEx( ...
- Python 数据结构_队列
目录 目录 队列 队列 Queue 队列是一种先进先出(FIFO)的数据类型, 新的元素通过 入队 的方式添加进 Queue 的末尾, 出队 就是从 Queue 的头部删除元素. 用列表来做 Queu ...
- jquery preventDefault()事件
定义和用法 preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 语法 event.preventDefault() 参数 描述 event 必需. ...