博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3327 [SDOI2015]约数个数和
阅读量:6435 次
发布时间:2019-06-23

本文共 2152 字,大约阅读时间需要 7 分钟。

思路

做这题先要知道一个性质,

\[ d_{ij}=\sum_{x|i}\sum_{y|j}[(x,y)=1] \]

然后上莫比乌斯反演颓柿子就好了

\[ \begin{align}&\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[(x,y)=1]\\=&\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}\sum_{d|(x,y)}\mu(d)\\=&\sum_{i=1}^n\sum_{j=1}^m\sum_d^{min(n,m)}\mu(d)\sum_{x=1}^{\lfloor\frac{i}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{j}{d}\rfloor}1\\=&\sum_d^{min(n,m)}\mu(d)\sum_{i=1}^n\sum_{x=1}^{\lfloor\frac{i}{d}\rfloor}\sum_{j=1}^m\sum_{y=1}^{\lfloor\frac{j}{d}\rfloor}1\\=&\sum_d^{min(n,m)}\mu(d)\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{n}{xd}\rfloor\sum_{y=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{m}{dy}\rfloor\\=&\sum_d^{min(n,m)}\mu(d)\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{\lfloor \frac{n}{d}\rfloor}{x}\rfloor\sum_{y=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{\lfloor \frac{m}{d} \rfloor}{y}\rfloor\end{align}\\ \]

后面的部分,预处理一个\(\sum_{i=1}^n \lfloor \frac{n}{i} \rfloor\)就好了,前面上一个整除分块

代码

#include 
#include
#include
using namespace std;int isprime[50010],mu[50010],cnt,iprime[50010],n,m,t;long long sum[50010];void prime(int n){ mu[1]=1; isprime[1]=true; for(int i=2;i<=n;i++){ if(!isprime[i]){ iprime[++cnt]=i; mu[i]=-1; } for(int j=1;j<=cnt&&iprime[j]*i<=n;j++){ isprime[i*iprime[j]]=true; mu[i*iprime[j]]=-mu[i]; if(i%iprime[j]==0){ mu[i*iprime[j]]=0; break; } } } for(int i=1;i<=n;i++) mu[i]+=mu[i-1];}void pre(int n){ for(int i=1;i<=n;i++){ long long ans=0; for(int l=1,r;l<=i;l=r+1){ r=i/(i/l); ans=ans+1LL*(r-l+1)*(i/l); } sum[i]=ans; }}int main(){ scanf("%d",&t); prime(50000); pre(50000); // printf("ok\n"); while(t--){ scanf("%d %d",&n,&m); long long ans=0; for(int l=1,r;l<=min(n,m);l=r+1){ r=min(n/(n/l),m/(m/l)); // printf("l=%d\n",l); ans=ans+1LL*(mu[r]-mu[l-1])*sum[n/l]*sum[m/l]; } printf("%lld\n",ans); } return 0;}

转载于:https://www.cnblogs.com/dreagonm/p/10640668.html

你可能感兴趣的文章
ios 中字符串怎么换行
查看>>
XStream基本使用
查看>>
黑莓刷机
查看>>
NGUI v301 官方详解 Example 2 - Interaction
查看>>
Centos7配置JAVA_HOME
查看>>
003# ADempiere系统简介(二)
查看>>
利用 squid 反向代理提高网站性能
查看>>
协变&逆变
查看>>
glide 与 SubsamplingScaleImageView 结合使用
查看>>
前嗅ForeSpider教程:采集图片/视频/资源文件
查看>>
Linux下find参数-mtime n,-n,+n详解
查看>>
oracle数据库创建用户方法
查看>>
生成原始的依赖jar包运行的jar的执行命令
查看>>
zabbix agentd windows安装
查看>>
Hadoop基础入门学习笔记(基本概念)
查看>>
C++之RAII惯用法
查看>>
opencv学习02-播放视频,注意没有声音
查看>>
top命令 -b -n5 -d10
查看>>
LAMP的部署
查看>>
IntelliJ Community 14 使用简要 2015-3-17
查看>>