luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)
luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)
题目大意
设d(x)d(x)d(x)为x的因子的个数,给出N和M求
∑i=1n∑j=1md(i,j)\sum_{i=1}^n\sum_{j=1}^md(i,j) i=1∑nj=1∑md(i,j)
解题思路
根据rng58-clj等式,有
∑i=1n∑j=1md(i,j)=∑i=1n∑j=1m[gcd(i,j)=1]⌊ni⌋⌊mj⌋\sum_{i=1}^n\sum_{j=1}^md(i,j)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=1]\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{j}\right\rfloor i=1∑nj=1∑md(i,j)=i=1∑nj=1∑m[gcd(i,j)=1]⌊in⌋⌊jm⌋
显然对[gcd(i,j)=1][gcd(i,j)=1][gcd(i,j)=1]可以做反演,再通过改变枚举顺序,可以得到
∑i=1n∑j=1md(i,j)=∑d=1μ(d)∑i=1⌊nd⌋∑j=1⌊md⌋⌊nid⌋⌊mid⌋\sum_{i=1}^n\sum_{j=1}^md(i,j)=\sum_{d=1}\mu(d)\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}\left\lfloor\frac{n}{id}\right\rfloor\left\lfloor\frac{m}{id}\right\rfloor i=1∑nj=1∑md(i,j)=d=1∑μ(d)i=1∑⌊dn⌋j=1∑⌊dm⌋⌊idn⌋⌊idm⌋
预处理出∑i=1n⌊ni⌋\sum_{i=1}^n\left\lfloor\frac{n}{i}\right\rfloor∑i=1n⌊in⌋再做整除分块即可
AC代码
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
const int size=5e4+5;
int p[size];bool prime[size];
int mu[size];
int summu[size];
int tot;
typedef long long LL;
LL sum[size];
void init()
{mu[1]=1;for(int i=1;i<size;i++) prime[i]=true;for(int i=2;i<size;i++){if(prime[i]){p[++tot]=i;mu[i]=-1;}for(int j=1;j<=tot&&p[j]*i<size;j++){prime[i*p[j]]=false;if(i%p[j]==0){mu[i*p[j]]=0;break;}else mu[i*p[j]]=-mu[i];}}summu[0]=0;for(int i=1;i<size;i++) summu[i]=summu[i-1]+mu[i];memset(sum,0,sizeof(sum));for(int i=1;i<size;i++){for(int l=1,r;l<=i;l=r+1){r=i/(i/l);sum[i]+=(r-l+1)*(i/l);}}
}
int main()
{int t;init();scanf("%d",&t);while(t--){int n,m;scanf("%d%d",&n,&m);LL ans=0;if(n<m) swap(n,m);for(int l=1,r;l<=m;l=r+1){r=n/(n/l);r=min(r,m/(m/l));ans+=(summu[r]-summu[l-1])*sum[n/l]*sum[m/l];}printf("%lld\n",ans);}
}
luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)相关推荐
- P3327 [SDOI2015]约数个数和
P3327 [SDOI2015]约数个数和 题意: 设 d(x) 为 x 的约数个数,给定 n,m,求 ∑i=1n∑j=1md(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m}d(i, ...
- P3327 [SDOI2015]约数个数和 (mobius反演)
P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n∑j=1md(ij ...
- 并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和
题目大意 设d(x)为x的约数个数,\(t\)组询问,给定\(n,m\)(\(t,m,n\leq5*10^4\)),求$ \sum^n_{i=1}\sum^m_{j=1}d(i*j)$ 题解 假设\( ...
- [SDOI2015]约数个数和【莫比乌斯反演】
[SDOI2015]约数个数和 题意:\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^n\sum{j=1}^md(ij)\) 由结论得\[ans=\sum_{i=1}^n\sum_ ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数 ...
- 洛谷 [SDOI2015]约数个数和 解题报告
[SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...
- [BZOJ3994][SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1104 Solved: 762 [Submit][St ...
- SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
最新文章
- python【蓝桥杯vip练习题库】BASIC-15字符串对比(水题)
- 删除数据库里面所有表!
- tensorflow随笔-acosh,acos
- 为什么下一个十年的主战场在Serverless | 云原生Talk
- 按15分钟取数据_【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单...
- Linux内核的Softirq机制
- redlock java_分布式Redis的分布式锁Redlock
- 重写equals方法(未完)
- linux防止文件和目录被意外删除或修改
- 开放接口的安全验证方案(AES+RSA)
- 没了疫情红利的华大基因,靠什么保持增长?
- Linux下Pulseaudio的可视化管理---pavucontrol
- IDEA中amend
- 爬虫之汽车之家/抽屉新热榜/煎蛋网
- 高德地图刷新当前位置_高德地图怎样实现实时定位,得到当前地点的坐标,位置...
- Warning from https://repo.packagist.org: Support for Composer 1 is deprecate
- 你不知道的Guava用法
- 【Java设计模式】——单例模式
- 速度来看mac电脑怎么彻底关闭系统更新
- excel表格怎么调整行高和列宽_同事看呆!文档怎么打印在一页上?这招超简单!...
热门文章
- 使用visio画E-R图(灭火器信息管理系统)
- 手把手教你写HT1621显示驱动,简单明了,内含原码,方便移植,
- usb引导盘检测计算机系统,Bootable USB Test
- Mule学习(五、Mule Expression Language - MEL表达式)
- qt android播放器代码,Qt on android 播放视频的实现
- 2 Reactjs 使用 PropTypes 进行类型检查
- 【MySQL】sql调优实战教学
- 小米路由R3G Breed 刷Padavan/openWRT固件
- Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid
- 【论文指导】计算机毕业设计,摘要如何写?15篇案例把你安排明白