原题

就是让你求\(\sum\limits_{i=1}\sum\limits_{j=1}d(ij)\)(其中\(d(x)\)表示\(x\)的因数个数)

首先有引理(然而并没有证明):

\(d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[gcd(x,y)=1]\)

带到原式里得到:

\(ans=\sum\limits_{i=1}\sum\limits_{j=1}\sum\limits_{x|i}\sum\limits_{y|j}[gcd(x,y)=1]\)

利用\(\mu\)函数的性质把方括号换掉:

\(ans=\sum\limits_{i=1}\sum\limits_{j=1}\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{d|gcd(x,y)}\mu(d)\)

交换枚举主体:

\(ans=\sum\limits_{x=1}\sum\limits_{y=1}\sum\limits_{i=1}^{\lfloor\frac{N}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{y}\rfloor}\sum\limits_{d|gcd(x,y)}\mu(d)\)

进而得到:

\(ans=\sum\limits_{x=1}\sum\limits_{y=1}\lfloor\frac{N}{x}\rfloor\lfloor\frac{M}{y}\rfloor\sum\limits_{d|gcd(x,y)}\mu(d)\)

首先枚举\(d\):

\(ans=\sum\limits_{d=1}^{min\{N,M\}}\mu(d)\sum\limits_{x=1}^{\lfloor\frac{N}{d}\rfloor}\sum\limits_{y=1}^{\lfloor\frac{M}{d}\rfloor}\lfloor\frac{N}{x}\rfloor\lfloor\frac{M}{y}\rfloor\)

后面的顺序是无所谓的,交换一下:

\(ans=\sum\limits_{d=1}^{min\{N,M\}}\mu(d)\sum\limits_{x=1}^{\lfloor\frac{N}{d}\rfloor}\lfloor\frac{N}{x}\rfloor\sum\limits_{y=1}^{\lfloor\frac{M}{d}\rfloor}\lfloor\frac{M}{y}\rfloor\)

然后发现只要预处理一下后面的东西就可以整除分块了

贴一下代码:

#include <bits/stdc++.h>

using namespace std;

#define N 50000

int cnt, prime[N+5], mu[N+5], sum[N+5], notprime[N+5];
int b[N+5]; void init()
{
mu[1] = sum[1] = notprime[1] = 1;
for(int i = 2; i <= N; ++i)
{
if(!notprime[i]) prime[++cnt] = i, mu[i] = -1;
for(int j = 1; j <= cnt && i*prime[j] <= N; ++j)
{
notprime[i*prime[j]] = 1;
if(i%prime[j] == 0)
{
mu[i*prime[j]] = 0;
break;
}
mu[i*prime[j]] = mu[i]*-1;
}
sum[i] = sum[i-1]+mu[i];
}
for(int i = 1; i <= N; ++i)
{
for(int l = 1, r; l <= i; l = r+1)
{
r = min(i/(i/l), i);
b[i] += (r-l+1)*(i/l);
}
}
} int T, n, m; int main()
{
scanf("%d", &T);
init();
while(T--)
{
scanf("%d%d", &n, &m);
long long ans = 0;
if(n > m) swap(n, m);
for(int l = 1, r; l <= n; l = r+1)
{
r = min(min(n/(n/l), m/(m/l)), n);
ans += 1LL*(sum[r]-sum[l-1])*b[n/l]*b[m/l];
}
printf("%lld\n", ans);
}
return 0;
}

最新文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别
  2. JSONP实现
  3. ClearTrace
  4. SQL语句统计每天、每月、每年的数据
  5. Iframe刷新父窗口的几种方式
  6. openoffice下中文乱码问题解决
  7. [platform]新旧内核的device设备注册对比
  8. 对TMemoryStream的一些改进(用到了LockFile)
  9. [原创].NET 业务框架开发实战之七 业务层初步构想
  10. display flex 和a标签不行
  11. ajax的项目实操(只用于记录部分文件未引入)
  12. decoder3_8
  13. ASP.NET没有魔法——ASP.NET Identity的加密与解密
  14. 我从.net转到java的心得和体会
  15. [.Net跨平台]部署DTCMS到Jexus遇到的问题及解决思路---部署
  16. Kafka Cached zkVersion [62] not equal to that in zookeeper, skip updating ISR (kafka.cluster.Partition) 问题分析
  17. mac电脑复制键失灵
  18. 20165223 实验四 Android开发基础
  19. 潭州课堂25班:Ph201805201 爬虫高级 第一课 pyspider框架 (课堂笔记)
  20. jsp自定义标签开发

热门文章

  1. js 更改对象属性名
  2. Skyline Terra Explorer6.6弹出窗口实现复制功能
  3. Android为TV端助力:intent传递消息
  4. matlab中的实时音频
  5. Java中的Iterable与Iterator详解
  6. ubuntu环境下实现 多线程的socket(tcp) 通信
  7. win10 桌面设置为远程桌面
  8. 关于MySQL集群的一些看法
  9. C#-反射reflection
  10. Windows服务的安装卸载及错误查找