又一道。。。分数和取模次数成正比$qwq$


求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$

原式

$=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{gcd(i.j)}$

$=\sum_{d=1}^{N}\sum_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{M}{d}\rfloor}dij[gcd(i,j)==1]$

$=\sum_{d=1}^{N}\sum_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{M}{d}\rfloor}dij\sum_{k|gcd(i,j)}\mu(k)$

$=\sum_{d=1}^{N}\sum_{i=1}^{\lfloor\frac{N}{dk}\rfloor}\sum_{j=1}^{\lfloor\frac{M}{dk}\rfloor}dijk^2\sum_{k=1}^{\lfloor\frac{N}{d}\rfloor} \mu(k)$

$=\sum_{d=1}^{N}d\sum_{k=1}^{\lfloor\frac{N}{d}\rfloor} k^2 \mu(k)\sum_{i=1}^{\lfloor\frac{N}{dk}\rfloor}i\sum_{j=1}^{\lfloor\frac{M}{dk}\rfloor}j$

其中,$\sum_{i=1}^{\lfloor\frac{N}{dk}\rfloor}i\sum_{j=1}^{\lfloor\frac{M}{dk}\rfloor}j$为等差数列,可以$O(1)$求,并且对于不同的$k$是可以整除分块的;

$\sum_{d=1}^{N}d\sum_{k=1}^{\lfloor\frac{N}{d}\rfloor} k^2\mu(k)\sum_{i=1}^{\lfloor\frac{N}{dk}\rfloor}i\sum_{j=1}^{\lfloor\frac{M}{dk}\rfloor}j$中的$\lfloor\frac{N}{d}\rfloor$对于不同的$d$也是可以整除分块的;然后对于$k^2\mu(k)$先线性筛出来,再做个前缀和。

所以时间复杂度是$O(N)$的。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define ll long long
#define R register int
using namespace std;
namespace Fread {
static char B[<<],*S=B,*D=B;
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
}using Fread::g;
const int M=,N=;
int mu[N],pri[N/],sum[N],n,m,cnt;
bool v[N]; ll Inv;
inline void MU(int n) { mu[]=;
for(R i=;i<=n;++i) {
if(!v[i]) pri[++cnt]=i,mu[i]=-;
for(R j=;j<=cnt&&i*pri[j]<=n;++j) {
v[i*pri[j]]=true;
if(i%pri[j]==) break;
mu[i*pri[j]]=-mu[i];
}
} for(R i=;i<=n;++i) sum[i]=(ll)(sum[i-]+(ll)(mu[i]+M)*i%M*i)%M;
}
inline int S(int x,int y) {return (ll)x*(x+)%M*Inv%M*y%M*(y+)%M*Inv%M;}
inline int F(int n,int m) {register ll ret=; n>m?swap(n,m):void();
for(R l=,r;l<=n;l=r+) {
r=min(n/(n/l),m/(m/l));
ret=(ret+(ll)(sum[r]-sum[l-]+M)*S(n/l,m/l)%M)%M;
} return ret;
}
signed main() {
#ifdef JACK
freopen("NOIPAK++.in","r",stdin);
#endif
n=g(),m=g(); n>m?swap(n,m):void(); MU(n); register ll ans=;Inv=(M+)/;
for(R l=,r;l<=n;l=r+) {
r=min(n/(n/l),m/(m/l));
(ans+=(ll)(r-l+)*(l+r)%M*Inv%M*F(n/l,m/l)%M)%=M;
} printf("%lld\n",ans);
}

2019.06.09

P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演的更多相关文章

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

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

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

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

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

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

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

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

  5. 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告

    [国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...

  6. P1829 [国家集训队]Crash的数字表格 / JZPTAB

    推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...

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

    传送门 式子好麻烦orz……大佬好腻害orz->这里 //minamoto #include<iostream> #include<cstdio> #define ll ...

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

    题意:求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$. 开始开心(自闭)化简: $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$ =$\su ...

  9. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...

随机推荐

  1. Android SDK离线安装方法详解(加速安装)

    AndroidSDK在国内下载一直很慢··有时候通宵都下不了一点点,最后只有选择离线安装,现在发出离线安装地址和方法,希望对大家有帮助 一,首先下载SDK的安装包,android-sdk_r10-wi ...

  2. Android窗口系统第一篇---Window的类型与Z-Order确定

    Android的窗口系统是UI架构很重要的一部分,数据结构比较多,细节比较多.本篇文章主要介绍窗口相关数据结构和抽象概念理解,关于[窗口部分的博客]计划如下. 1.窗口Z-Order的管理 2.应用程 ...

  3. Stop logging "internal dummy connection" in Apache

    Apache 2.x keeps child processes alive by creating internal connections which appear in the log file ...

  4. windows 查看物理内存有几条以及查看电脑系统版本号的命令(dxdiag)

  5. 每天一个linux命令(4):pwd命令

    版权声明更新:2017-05-08博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下命令cd. 2 开发 ...

  6. bzoj 5093 图的价值 —— 第二类斯特林数+NTT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\li ...

  7. SQL大全(1)

    实用SQL语句大全 一.基础 1.创建数据库 create database 数据库名 2.删除数据库 drop database 数据库名 3.增加列 alter table 表名 add 列名 类 ...

  8. 用python监控您的window服务

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://world77.blog.51cto.com/414605/782935 最近比较 ...

  9. Python中的数据结构和算法

    一.算法 1.算法的时间复杂度 大 O 记法,是描述算法复杂度的符号O(1) 常数复杂度,最快速的算法. 取数组第 1000000 个元素 字典和集合的存取都是 O(1) 数组的存取是 O(1) O( ...

  10. textarea的style="resize:none;"

    <textarea class="form-control" id="gryj" rows="3" maxlength="3 ...