题目大意:求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$的和

易得$\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{gcd(i,j)}$

套路1:提取出$gcd$

$\sum_{k=1}^{n}\frac{1}{k}\sum_{i=1}^{n}\sum_{j=1}^{m}ij$

$\sum_{k=1}^{n}k\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}ij$

$\sum_{k=1}^{n}k\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}\sum_{d|gcd(i,j)}\mu(d)$

套路2:继续提取$gcd$

$\sum_{k=1}^{n}k\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}[gcd(i,j)==d]ij$

$\sum_{k=1}^{n}k\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}d^{2}\sum_{i=1}^{\left \lfloor \frac{n}{kd} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{kd} \right \rfloor}ij$

$\sum_{i=1}^{\left \lfloor \frac{n}{kd} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{kd} \right \rfloor}ij$可以$O(1)$计算出来

套路3:令$Q=kd$

$\sum_{Q=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{Q} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{Q} \right \rfloor}ij\sum_{d|Q}\frac{Q}{d}(d)^{2}\mu(d)$

$\sum_{d|Q}\frac{Q}{d}(d)^{2}\mu(d)$显然是积性函数

然后问题就解决了

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10010000
#define maxn 10000000
#define ll long long
#define uint unsigned int
#define rint register int
using namespace std; int n,m,T,cnt;
int mu[N],pr[N],use[N];
int f[N],F[N];
const int mod=; void Pre()
{
mu[]=;f[]=;
for(int i=;i<=maxn;i++)
{
if(!use[i]) pr[++cnt]=i,mu[i]=-,f[i]=(1ll*i*(-i))%mod;
for(rint j=;j<=cnt&&i*pr[j]<=maxn;j++){
use[i*pr[j]]=;
if(i%pr[j]){
mu[i*pr[j]]=-mu[i];
f[i*pr[j]]=1ll*f[i]*f[pr[j]]%mod;
}else{
mu[i*pr[j]]=;
f[i*pr[j]]=1ll*f[i]*pr[j]%mod;
break;
}
}
}
for(int i=;i-<=maxn;i+=)
{
F[i+]=(1ll*F[i-]+f[i+])%mod;
F[i+]=(1ll*F[i+]+f[i+])%mod;
F[i+]=(1ll*F[i+]+f[i+])%mod;
F[i+]=(1ll*F[i+]+f[i+])%mod;
}
}
ll solve(int n,int m)
{
ll ans=,sn,sm;
if(n>m) swap(n,m);
for(int i=,la;i<=n;i=la+)
{
la=min(n/(n/i),m/(m/i));
sn=(1ll*(n/i)*(n/i+)/)%mod;
sm=(1ll*(m/i)*(m/i+)/)%mod;
(ans+=1ll*sn*sm%mod*(F[la]-F[i-]))%=mod;
}ans=(ans%mod+mod)%mod;
return ans;
} int main()
{
//freopen("t1.in","r",stdin);
scanf("%d",&T);
Pre();
int n,m;
while(T--)
{
scanf("%d%d",&n,&m);
printf("%lld\n",solve(n,m));
}
return ;
}

调试部分的代码..留个纪念吧

 int ps[N],son[N],d[N],num,nson;
void dfs_son(int s,int dep)
{
if(dep>num) {son[++nson]=s;return;}
for(int j=;j<=d[dep];j++)
dfs_son(s,dep+),s*=ps[dep];
}
ll g[N];
void check()
{
for(int i=;i<=maxn;i++){
int sq=sqrt(i),x=i;
num=nson=;
for(int j=;j<=cnt&&pr[j]<=sq;j++)
if(x%pr[j]==){
ps[++num]=pr[j];
while(x%pr[j]==) d[num]++,x/=pr[j];
}
if(x!=) ps[++num]=x,d[num]=;
dfs_son(,);
for(int j=;j<=nson;j++)
(g[i]+=mu[son[j]]*son[j]%mod)%=mod,
son[j]=;
g[i]=g[i]*i%mod;
for(int i=;i<=num;i++)
d[i]=;
}
}

BZOJ 2154/2693 Crash的数字表格/jzptab (莫比乌斯反演)的更多相关文章

  1. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  2. 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)

    2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...

  3. 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...

  4. [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演

    ---题面--- 题解: $$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$ 改成枚举d(设n < m) $$ans ...

  5. P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演

    又一道...分数和取模次数成正比$qwq$ 求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$ 原式 $=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{g ...

  6. luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...

  7. 【BZOJ2154】Crash的数字表格(莫比乌斯反演)

    [BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...

  8. BZOJ2154/BZOJ2693/Luogu1829 Crash的数字表格/JZPFAR 莫比乌斯反演

    传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\ ...

  9. BZOJ2154 Crash的数字表格 【莫比乌斯反演】

    BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...

随机推荐

  1. 【WPF】这可能是全网最全的拖拽实现方法的总结

    原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口.控件等内容的 ...

  2. TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤

    一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...

  3. tcpsock for Golang

    前记:本文所述的 tcpsock 库托管在 Github. Golang 中的 net 标准库已对 TCP 网络编程作了简洁(却很不简单)的封装,基本上,可直接通过引用其提供的相关接口开发简易的网络应 ...

  4. mysql存储小数

    线下不知道什么版本的古董了,经本人亲测,varchar类型的数据,可以直接执行mysql的sum函数. ________________________________________________ ...

  5. MyBatis学习总结(5)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  6. RabbitMQ学习总结(2)——安装、配置与监控

    一.安装 1.安装Erlang 1)系统编译环境(这里采用linux/unix 环境) ① 安装环境 虚拟机:VMware® Workstation 10.0.1 build Linux系统:Cent ...

  7. [terry笔记]GoldenGate_迁移同步_主库零停机

    ogg根据scn同步数据,源库零停机时间 本次实验与上次的区别:更加注重细节,几乎包含所有步骤,把我越到的坑都作出了说明.并且同步是由10g向11g进行同步,更加符合升级迁移需求. 如下是主要步骤: ...

  8. WinServer-IIS-woff字体不显示问题

    ASP.NET mvc发布到IIS之后,访问网站的时候,发现woff字体没有加载 百度发现很多博客上的教程是这样的,在IIS管理器中的MIME选项中添加类型 但是重新使用IIS发布后,新添加的字体就会 ...

  9. 讲一讲java异常及自定义异常

    1.异常,说白了.两种,一种就是就是不能让代码通过编译的异常.另一种就是程序运行期间出现的异常.异常就是错误,只要出现异常,程序就不会向下运行了.就不会执行后面的代码了.这时候就可以通过显示statc ...

  10. 电脑显示U盘,可是读取不了

    问题: 我的一个内存卡没用,放到了读卡器上.刚開始能用,可是到了后来,突然之间发现: 插入读卡器之后,仅仅是在U下角显示有有U盘提示,提示"打开设备和打印"或者"安全删除 ...