求解\(\sum_{i = 1}^{n}\sum_{j = 1}^{m}lcm\left ( i,j \right )\)。

有\(lcm\left ( i,j \right )=\frac{ij}{gcd\left ( i,j \right )}\),

所以原本的式子转化为:\(\sum_{i = 1}^{n}\sum_{j = 1}^{m}\frac{ij}{gcd\left ( i,j \right )}\)。

注意到\(i, j\) 均为 \(gcd\left ( i,j \right )\) 的倍数,且原式中有除法不好处理,

所以我们改为枚举\(gcd\left ( i,j \right )\) 的倍数。

有:\(\sum_{d = 1}^{n}  d \sum_{i = 1}^{\frac{n}{d}}\sum_{j = 1}^{\frac{m}{d}}ij\left [ gcd\left ( i,j \right ) = 1 \right]\)。

后面的式子套路的来一发反演:

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

注意这里面有一个乘积的项,可以理解为是任意数字的两两匹配,即:

\(\sum_{i = 1}^{n}\sum_{j = 1}^{m}ij = \left ( 1 + 2 + ... + n \right )\left ( 1 + 2 + ... + m \right )\)

所以转化为:

\(\sum_{d = 1}^{n}  d \sum_{k = 1}^{\frac{n}{d}} k^{2} * \mu \left ( k \right )sum\left ( \left \lfloor \frac{n}{dk} \right \rfloor \right )sum\left ( \left \lfloor \frac{m}{dk} \right \rfloor \right )\)

依然是套路的改变枚举项为 \(dk\)

\(\sum_{T = 1}^{n}  sum\left ( \left \lfloor \frac{n}{T} \right \rfloor \right )sum\left ( \left \lfloor \frac{m}{T} \right \rfloor \right ) * T \sum_{d|T}d*\mu \left ( d \right )\)

  到这里我们已经实现了第一步:前面的部分可以数论分块\(O\left ( \sqrt{n} \right )\)处理,只要我们能够通过线性筛处理出后面的一部分,这道题目就完成了。为了实现线性筛,我们对于后面部分进行观察。我们令\(F[T] = T * \sum_{d|T}d*\mu \left ( d \right )\) 。

  首先,\(F[i]\)当 \(i\) 为质数时,\(F[i]\) 的值很容易确定为 \(i - i^{2}\)。 注意到它实际上是积性函数。所以在线性筛中若 \(i = x * y\) ,(其中 \(x\) 为 \(i\) 的最小质因子),当 \(y \  mod \ x \neq  0\) 时说明二者互质,则 \(F[i] = F[x] * F[y]\)。

  然后考虑当\(y \  mod \ x =  0\)的情况,这说明这两个部分中均含有最小的质因子。注意因为卷入了一个 \(\mu\),所以有平方因子时的值都不会造成贡献。也就是说取值范围和 \(y\) 仍然是相同的,只不过是系数改变了。所以此时 \(F[i] = F[y] * x \)。然后此题就圆满解决啦~~~

#include <bits/stdc++.h>
using namespace std;
#define maxn 10005000
#define int long long
#define mod 20101009
int n, m, N, maxx = maxn - 1e3;
int tot, pri[maxn], inv2;
int ans, f[maxn];
bitset <maxn> is_prime; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} int qpow(int x, int times)
{
int base = ;
for(; times; times >>= , x = (x * x) % mod)
if(times & ) base = (base * x) % mod;
return base;
}
int Sum(int x) { x %= mod; return ((x * (x + )) % mod * inv2 % mod);} void Get_F()
{
f[] = ;
for(int i = ; i <= maxx; i ++)
{
if(!is_prime[i]) pri[++ tot] = i, f[i] = i * (1ll - i) % mod;
for(int j = ; j <= tot; j ++)
{
int K = i * pri[j]; if(K > maxx) break;
is_prime[K] = ;
if(!(i % pri[j])) { f[K] = f[i] * pri[j] % mod; break; }
else f[K] = f[i] * f[pri[j]] % mod;
}
}
for(int i = ; i <= maxx; i ++) f[i] = (f[i] + f[i - ]) % mod;
} signed main()
{
n = read(), m = read(), N = min(n, m);
maxx = min(n, m); inv2 = qpow(, mod - );
Get_F();
for(int l = , r; l <= N; l = r + )
{
r = min((n / (n / l)), (m / (m / l)));
int ret = Sum(n / l) * Sum(m / l) % mod;
ans = (ans + (ret * (f[r] - f[l - ]) % mod)) % mod;
}
printf("%lld\n", (ans + mod) % mod);
return ;
}

【题解】[国家集训队]Crash的数字表格 / JZPTAB的更多相关文章

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

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

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

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

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

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

  4. 题解 P1829 【[国家集训队]Crash的数字表格 / JZPTAB】

    题目 我的第一篇莫比乌斯反演题解 兴奋兴奋兴奋 贡献一个本人自己想的思路,你从未看到过的船新思路 [分析] 显然,题目要求求的是 \(\displaystyle Ans=\sum_{i=1}^n\su ...

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

    传送门:洛谷,bzoj 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整 ...

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

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

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

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

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

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

  9. 【[国家集训队]Crash的数字表格 / JZPTAB】

    这道题我们要求的是 \[\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\] 总所周知\(lcm\)的性质不如\(gcd\)优雅,但是唯一分解定理告诉我们\(gcd(i,j)\time ...

随机推荐

  1. less学习二---变量

    less中声明的变量可以存储css属性值,还可以存储选择器,属性名,url以及@imporant等 变量声明及赋值格式:@variableName : varableValue ; //属性值 //l ...

  2. python学习之常用模块

  3. python系列7进程线程和协程

    目录 进程 线程 协程  上下文切换 前言:线程和进程的关系图 由下图可知,在每个应用程序执行的过程中,都会去产生一个主进程和主线程来完成工作,当我们需要并发的执行的时候,就会通过主进程去生成一系列的 ...

  4. 齐博cms最新SQL注入网站漏洞 可远程执行代码提权

    齐博cms整站系统,是目前建站系统用的较多的一款CMS系统,开源,免费,第三方扩展化,界面可视化的操作,使用简单,便于新手使用和第二次开发,受到许多站长们的喜欢.开发架构使用的是php语言以及mysq ...

  5. 44- EF + Identity实现

    1-配置EF, 需要创建如下几个类 默认User主键为guid类型,现在改成int类型 namespace MvcCookieAuthSample.Models { public class Appl ...

  6. AOP原理??

    面向切面编程,在我们的应用中,经常需要做一些事情,但是这些事情与核心业务无关,比如,事务.日志.权限拦截.统一异常处理等等.Spring AOP使用了代理模式. Spring AOP底层利用两种代理模 ...

  7. python2.7练习小例子(五)

        5):题目:输入三个整数x,y,z,请把这三个数由小到大输出.     程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比 ...

  8. Git的升级版本

    关于升级版本,例如我们要升级service版本,我们可以这样子操作 1.在master里面pull完了之后,到自己的分支,然后merge master里面的代码,然后把pom文件 里面的版本升一级,然 ...

  9. 【转】Git远程操作详解

    Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...

  10. LINUX网络相关命令(转)

    网络连通性 Ping:发送一个 ICMP 回声请求消息给主机,一直持续到到你按下 Ctrl+C .Ping 表示一个包通过 ICMP 从你的机器发送出去,然后在IP层得到回应.Ping 可以检测你与另 ...