我们要求的是∑ni=1∑mj=1(2×gcd(i,j)−1)

化简得2×∑ni=1∑mj=1gcd(i,j)−n×m

所以我们现在只需要求出∑ni=1∑mj=1gcd(i,j)即可

∑ni=1∑mj=1gcd(i,j)

=∑ni=1∑mj=1∑d|gcd(i,j)ϕ(d)

=∑min(n,m)d=1ϕ(d)×⌊nd⌋×⌊md⌋

预处理ϕ的前缀和,下底分组即可

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#define N 100500
using namespace std;
int prime[N],tot,n,m;
long long phi[N],ans;
bool bo[N];
void init(){
phi[1]=1;
for(int i=2;i<=n;i++){
if(!bo[i]){
prime[++tot]=i;
phi[i]=i-1;
}
for(int j=1;j<=tot&&i*prime[j]<=n;j++){
bo[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(int i=1;i<=n;i++)phi[i]+=phi[i-1];
}
int main(){
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);
init();
for(int i=1,j;i<=n;i=j+1){
j=min(n/(n/i),m/(m/i));
ans+=(long long)(phi[j]-phi[i-1])*(n/i)*(m/i);
}
ans*=2; ans-=(long long)n*m;
printf("%lld\n",ans);
return 0;
}

最新文章

  1. C#SerialPort如何读取串口数据并显示在TextBox上
  2. 使用css让div半透明
  3. Runner站立会议03
  4. easyui 布局自适应
  5. C# 获取打印机状态
  6. Specify a culture in string conversion explicitly
  7. if 和 swith的选择.
  8. ViewPager引导
  9. Hot Days Codeforces Round #132 (Div. 2) D(贪婪)
  10. SQL入门学习5-函数、为此、CASE表达式
  11. POST请求中参数以form data和request payload形式+清空数组方式
  12. SqlParameter 使用
  13. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-3
  14. xpo-4大类
  15. android 解析服务器数据使用json还是xml方式
  16. Android 自定义view --圆形百分比(进度条)
  17. C语言程序猿必会的内存四区及经典面试题解析
  18. 编程总结5&amp;学习总结
  19. web进修之—Hibernate HQL(7)
  20. js如何发送wss协议的请求,以及接受服务器返回的数据

热门文章

  1. IT咨询顾问:一次吐血的项目救火
  2. centos 安装 vsftpd
  3. 新知识:JQuery语法基础与操作
  4. (linux虚拟机)克隆得到的虚拟机修改网卡信息和IP地址,以及DNS
  5. windows系统下输入法图标显示设置
  6. Linux的动态库与静态库
  7. HTML 学习笔记 day one
  8. [ASP.NET MVC] Controlle中的Aciton方法数据接收方式
  9. mybatis源码解读(四)——事务的配置
  10. gawk编程语言