莫比乌斯反演套路三、四--BZOJ2154: Crash的数字表格 && BZOJ2693: jzptab
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 ;
}
莫比乌斯反演套路三、四--BZOJ2154: Crash的数字表格 && BZOJ2693: jzptab的更多相关文章
- BZOJ2154: Crash的数字表格 & BZOJ2693: jzptab
[传送门:BZOJ2154&BZOJ2693] 简要题意: 给出n,m,求$\sum_{i=1}^{n}\sum_{j=1}^{m}LCM(i,j)$ 题解: 莫比乌斯反演(因为BZOJ269 ...
- BZOJ2154 Crash的数字表格 【莫比乌斯反演】
BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...
- Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...
- 【莫比乌斯反演】BZOJ2154 Crash的数字表格
Description 求sigma lcm(x,y),x<=n,y<=m.n,m<=1e7. Solution lcm没有什么直接做的好方法,用lcm=x*y/gcd转成gcd来做 ...
- bzoj2154: Crash的数字表格 莫比乌斯反演
题意:求\(\sum_{i=1}^n \sum_{j=1}^m\frac{i*j}{gcd(i,j)}\) 题解:\(ans=\sum_{i=1}^n\sum_{j=1}^m \frac{i*j}{g ...
- [bzoj2154]Crash的数字表格(mobius反演)
题意:$\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^m {lcm(i,j)} } $ 解题关键: $\sum\limits_{i = 1}^n {\sum\l ...
- BZOJ2154: Crash的数字表格
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2154 题意&&题解:http://www.cnblogs.com/jiangl ...
- bzoj千题计划253:bzoj2154: Crash的数字表格
http://www.lydsy.com/JudgeOnline/problem.php?id=2154 #include<cstdio> #include<algorithm> ...
- 【BZOJ2154】Crash的数字表格(莫比乌斯反演)
[BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...
随机推荐
- 转 mysql oracle 指定rand随机数范围
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 459 Repeated Substring Pattern 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.示例 1:输入: "abab"输出: True解释: 可由 ...
- hbase最近的一些实践
有一段实践没有写东西了,最近组里面来了两个新的小伙伴,并且一起针对目前的hbase集群做了一些运维和优化实践,比较零散,记录下来供以后以及和大家参考. 1,hbase regionserver宕机导致 ...
- Codeforces Beta Round #98 (Div. 2)(A-E)
A #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- Django model 反向引用中的related_name
转自:https://blog.csdn.net/lanyang123456/article/details/68962515 问题: 定义表Apple: class Apple( models.Mo ...
- 使用Xamarin.Forms跨平台开发入门 Hello,Xamarin.Forms 第一部分 快速入门
本文介绍了如何使用VisualStudio开发Xamarin.Forms 应用程序和使用Xamarin.Forms开发应用的基础知识,包括了构建和发布Xamarin.Forms应用的工具,概念和步骤. ...
- SQL 索引自动维护计划脚本
脚本功能: 1,查询数据库中,碎片率在5%以上(官方推荐),有一定数据里的表的索引. 2.如果碎片率在5%<碎片率<=30% 执行重新组织索引.如果在30%以上,执行重建索引 建议在执行 ...
- vue1.0生命周期
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- mycat+ mysql集群 分库分表
mycat介绍Mycat数据库分库分表中间件国内最活跃的.性能最好的开源数据库中间件!Mycat关键特性关键特性支持SQL92标准支持MySQL.Oracle.DB2.SQL Server.Postg ...
- Python 保留n位小数
输出a, b 且保留三位小数 a = 2.3456 b = 2.0000 三种方法: round(a, 3)('%.3f' % a)Decimal(a).quantize(Decimal('0.000 ...