t<=1e4个询问每次问n,m<=1e7,$\sum_{1\leqslant x \leqslant n,1 \leqslant y\leqslant m}lcm(x,y)$。

首先题目要求的是$\sum_{1 \leqslant x \leqslant n,1 \leqslant y \leqslant m}lcm(x,y)=\sum_{1 \leqslant x \leqslant n,1 \leqslant y \leqslant m}\frac{x*y}{(x,y)}$,

啊很好那来枚举gcd吧,$\sum_{t=1}^{min(n,m)} t^{-1} f(t)$,其中$f(t)=\sum_{1\leqslant x \leqslant n,1\leqslant y \leqslant m,(x,y)=t} x*y$,哦太棒了来反演吧。

套路三:反演个鬼啊先化一化:$f(t)=t*t*\sum_{1 \leqslant x \leqslant n,1 \leqslant y \leqslant m,(x,y)=1} x*y$。

好来演$g(t)=\sum_{1 \leqslant x \leqslant n,1\leqslant y \leqslant m}xy=\frac{x*(x+1)}{2}\frac{y*(y+1)}{2}$,$f(t)=t*t*\sum_{1 \leqslant d \leqslant t}\mu(d)\frac{n}{d}\frac{m}{d}$。

代进去!前后枚举约数和除数暴力算即可。$\sqrt n * \sqrt n$=O(n)搞定。

套路三就是反演之前冷静一下变个型啦。

套路四:化个鬼啊直接反演:$\sum_{t=1}^{min(n,m)} t^{-1} \sum_{1\leqslant x \leqslant n,1\leqslant y \leqslant m,(x,y)=t} x*y =\sum_{t=1}^{min(n,m)} t^{-1} \sum_{t|d} \mu(\frac{d}{t}) \sum_{1 \leqslant x \leqslant n,1\leqslant y \leqslant m,d|(x,y)} x*y= \sum_{t=1}^{min(n,m)} t^{-1} \sum_{t|d} \mu(\frac{d}{t}) * d^2 * \frac{(1+\frac{n}{d})\frac{n}{d}}{2} \frac{(1+\frac{m}{d})\frac{m}{d}}{2}=\sum_{t=1}^{min(n,m)}\sum_{t|d} \mu(\frac{d}{t})* \frac{d}{t} * d * \frac{(1+\frac{n}{d})\frac{n}{d}}{2} \frac{(1+\frac{m}{d})\frac{m}{d}}{2} = \sum_{d=1}^{min(n,m)} \frac{(1+\frac{n}{d})\frac{n}{d}}{2} \frac{(1+\frac{m}{d})\frac{m}{d}}{2} * d * \sum_{t|d} \mu(t) * t$。

漂亮!前面一坨可以根号枚举,如果能得到线性得到所有$d * \sum_{t|d} \mu(t) * t$就可以了。先不*d,这东西不是个积性函数么?(打表可知,易证)

线性筛筛出来然后记个前缀和,就可以$O(n)$预处理,然后$O(\sqrt n)$回答每个询问了。

 //#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
//#include<bitset>
#include<algorithm>
//#include<cmath>
using namespace std; const int mod=;
int T,n,m;
#define maxn 10000011
int inv[maxn],miu[maxn],prime[maxn],sum[maxn],lp; bool notprime[maxn];
void pre(int n)
{
miu[]=; lp=; sum[]=;
long long tmp;
for (int i=;i<=n;i++)
{
if (!notprime[i]) {prime[++lp]=i; miu[i]=-; sum[i]=mod-i+;}
for (int j=;j<=lp && (tmp=1ll*prime[j]*i)<=n;j++)
{
notprime[tmp]=;
if (i%prime[j]) miu[tmp]=-miu[i],sum[tmp]=1ll*sum[i]*sum[prime[j]]%mod;
else {miu[tmp]=; sum[tmp]=sum[i]; break;}
}
}
for (int i=;i<=n;i++) sum[i]=1ll*sum[i]*i%mod,sum[i]+=sum[i-],sum[i]-=sum[i]>=mod?mod:;
// for (int i=1;i<=n;i++) cout<<sum[i]<<' ';cout<<endl;
} int main()
{
scanf("%d%d",&n,&m);
pre(min(n,m));
// scanf("%d",&T);
//while (T--)
//{
int ans=;
for (int i=,to=min(n,m),last,hh=((mod+)>>)*1ll*((mod+)>>)%mod;i<=to;i=last+)
{
last=min(n/(n/i),m/(m/i));
ans+=1ll*(n/i)*(m/i)%mod*(+(n/i))%mod*(+(m/i))%mod*hh%mod*(sum[last]-sum[i-])%mod;
ans-=ans>=mod?mod:,ans+=ans<?mod:;
}
printf("%d\n",ans);
//}
return ;
}

最新文章

  1. react native 的图表开源组件react-native-chart-android
  2. VC++ 将资源位图画到窗口上去的方法
  3. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
  4. Speed-BI 云平台视频观看频道
  5. Table Groups [AX 2012]
  6. C#学习笔记---基础入门(一)
  7. 在Windows8工作站上安装可靠多播协议
  8. Definition of:payload
  9. VBS基础篇 - 对象(3) - FileSystemObject对象
  10. java获取硬盘ID以及MAC地址
  11. Centos7 &amp; Docker &amp; Jenkins &amp; ASP.NET Core 2.0 自动化发布和部署
  12. Excel的列编号 例如:A对应1,Z对应26,AA对应27,AZ对应52的JavaScript怎么写?
  13. (60)Wangdao.com第十天_JavaScript 函数_作用域_闭包_IIFE_回调函数_eval
  14. 用python批量向数据库(MySQL)中导入数据
  15. 2.4G和5G的Wi-Fi各自优缺点对比
  16. exec函数族
  17. 【Oracle】【8】大批量update某个字段
  18. SCRUM 12.20
  19. Python在函数中使用*和**接收元组和列表
  20. UI控件(ios)---UIImageView

热门文章

  1. 230 Kth Smallest Element in a BST 二叉搜索树中第K小的元素
  2. Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat,Eclipse Debug调试
  3. 记录一下java在后端用request来判断请求类型
  4. (五)SpringIoc之Bean的作用域
  5. jQuery实现复选框的全选与全不选
  6. JS中的Promise
  7. Farseer.net轻量级ORM开源框架 V1.5版本升级消息
  8. CentOS 6.4 linux下编译安装MySQL5.6.14
  9. create_module - 生成一条可加载模块记录
  10. 上POJ刷题