题意

\(T\le 10^4\) 次询问 \(n,m\) ,求

\[\sum _{i=1}^n\sum _{j=1}^m[gcd(i,j)\text { is prime}]
\]

分析

这题还是很有趣的。设 \(n\le m\) 。

\[\begin{aligned}
\sum _{i=1}^n\sum_{j=1}^m[gcd(i,j)\text { is prime}]&=\sum _{i=1}^n\sum _{j=1}^m\sum _k [k\text { is prime}][gcd(i,j)=k] \\
&=\sum _{i=1}^n\sum _{j=1}^m\sum _{k|i,k|j}[k\text { is prime}]\sum _{d|\frac{i}{k},d|\frac{j}{k}}\mu(d) \\
&=\sum _{d=1}^n\mu (d)\sum _{k=1}^n[k\text { is prime}]\sum _{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum _{j=1}^{\lfloor\frac{m}{k}\rfloor}[d|i,d|j] \\
&=\sum _{d=1}^n\mu (d)\sum _{k=1}^n[k\text { is prime}]\lfloor\frac{n}{kd}\rfloor \lfloor\frac{m}{kd}\rfloor \\
&=\sum _{i=1}^n\lfloor\frac{n}{i}\rfloor \lfloor\frac{m}{i}\rfloor\sum _{k|i,k\text { is prime}}\mu(\frac{i}{k})
\end{aligned}
\]

令 \(f(x)=\sum _{k|x,k\text {is prime }}\mu (x/k)\) ,我们有:

\[ans=\sum _{i=1}^n\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor f(i)
\]

\(f(x)\) 可以在线性筛的过程中顺便处理出来,求前缀和就可以做到每次询问 \(O(\sqrt n)\) 。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long giant;
inline int read() {
int x=0,f=1;
char c=getchar_unlocked();
for (;!isdigit(c);c=getchar_unlocked()) if (c=='-') f=-1;
for (;isdigit(c);c=getchar_unlocked()) x=x*10+c-'0';
return x*f;
}
const int maxn=1e7+1;
bool np[maxn];
int p[maxn],ps=0,mu[maxn],f[maxn];
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
mu[1]=1,f[1]=0;
for (int i=2;i<maxn;++i) {
if (!np[i]) p[++ps]=i,mu[i]=-1,f[i]=1;
for (int j=1,tmp;j<=ps && (tmp=i*p[j])<maxn;++j) {
np[tmp]=true;
if (i%p[j]) mu[tmp]=-mu[i],f[tmp]=mu[i]-f[i]; else {
mu[tmp]=0;
f[tmp]=mu[i];
break;
}
}
}
for (int i=2;i<maxn;++i) f[i]+=f[i-1];
int T=read();
while (T--) {
int n=read(),m=read();
if (n>m) swap(n,m);
giant ans=0;
for (int i=1,j;i<=n;i=j+1) {
j=min(n/(n/i),m/(m/i));
ans+=(giant)(f[j]-f[i-1])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. 后台管理UI皮肤的选择
  2. Keepalived 双机热备
  3. SQL日语词汇
  4. HTML5自带的原生定位
  5. 多线程之RunLoop
  6. spring定时任务的配置
  7. Java Json开源解析包 google-gson download(下载)
  8. 《Qt编程的艺术》——9.1 QtSql模块的结构
  9. 创建在SQLServer 和 Oracle的 DBLINK
  10. 【WPF】学习笔记(三)——这个家伙跟电子签名板有个约定
  11. thinkpad x260在ubuntu 14.04lts wifi驱动安装 ( ubuntu iwlwifi驱动 都可行 )
  12. python3爬虫_环境安装
  13. MY服务器架设
  14. ubuntu下openssh升级
  15. 基于Python——实现解压文件夹中的.zip文件
  16. ABP框架系列之三:(Entity Framework Integration-实体框架集成)
  17. JdbcTemolate类的介绍&lt;一&gt;
  18. CF 329A(Purification-贪心-非DLX)
  19. redis 命令select、dbsize、清空数据库、info、client
  20. 【BZOJ3275】Number 最小割

热门文章

  1. 20155322 2017-2018-1《信息安全系统设计》第十周 课下作业-IPC
  2. 20155322 2016-2017-2 《Java程序设计》实验二《Java面向对象程序设计》
  3. Scala中==,eq与equals的区别
  4. Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
  5. SQL查找重复项目
  6. 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容
  7. php实现快速排序和冒泡排序
  8. 时序数据库InfluxDB
  9. Leetcode_2. Add_Two_Number
  10. 请教Amazon FBA里面Label Service, Stickerless, Commingled Inventory是什么意思?