http://www.lydsy.com/JudgeOnline/problem.php?id=2154

题意:求$\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)$, $n,m<=1e7$

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N=1e7+10, MD=20101009;
int p[N], pcnt, n, m;
bool np[N];
ll g[N];
void init() {
g[1]=1;
int i, j, t;
for(i=2; i<=n; ++i) {
if(!np[i]) p[++pcnt]=i, g[i]=1-i;
for(j=1; j<=pcnt; ++j) {
t=p[j]*i; if(t>n) break;
np[t]=1;
if(i%p[j]==0) { g[t]=g[i]; break; }
g[t]=g[i]*(1-p[j]);
}
}
for(i=2; i<=n; ++i) g[i]*=i;
for(i=1; i<=n; ++i) g[i]+=g[i-1], g[i]%=MD;
}
int main() {
scanf("%d%d", &n, &m); if(n>m) swap(n, m);
init();
ll ans=0, t1, t2;
for(int i=1, pos=0; i<=n; i=pos+1) {
pos=min(n/(n/i), m/(m/i));
t1=((ll)(n/i)*(n/i+1)/2)%MD;
t2=((ll)(m/i)*(m/i+1)/2)%MD;
ans+=((g[pos]-g[i-1])*((t1*t2)%MD))%MD;
ans%=MD;
}
printf("%lld\n", ((ans%MD)+MD)%MD);
return 0;
}

  

吐槽:

妈妈我再也不相信科学了QAQ..............这种题各种不知道哪里爆+各种不知道哪里爆让我十分蛋疼QAQ

sb错1:忘记最后除法不一定是整数QAQ,那么一定要在中途能保证是整数的就算出来啊= =后边算不出来的啊喂。。

sb错2:各种爆longlong让我十分无语,取太多mod又会很慢= =(看来为了保险起见...以后哪里要mod就mod...不要乱估计啦。。。

然后不明觉厉...为何我查询已经做到$O(n^{0.5} + m^{0.5})$了,还是那么慢?那些200多ms的是什么神做法QAQ难道是分块打表了吗QAQ

本题很恶心,为了推出$O(n^{0.5} + m^{0.5})$的查询我推了十分钟,然后各种wa以为是推错了QAQ原来是精度,妈妈压。。。

(我真的有不想写推导公式的过程的冲动QAQ

下边均设$n<=m$

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

然后我们要想枚举$d=(i,j)$,那么就要确定$ij$怎么取,显然我们只需要先除去$i$和$j$的$d$,也就是$(i/d,j/d)=1$就行了,那么设

$$F(x, y) = \sum_{i=1}^{x} \sum_{j=1}^{y} ij[(i,j)=1]$$

那么原式变成

$$
\sum_{d=1}^{n} \frac{d^2 F(\lfloor \frac{n}{d} \rfloor, \lfloor \frac{m}{d} \rfloor)}{d} = \sum_{d=1}^{n} d F(\lfloor \frac{n}{d} \rfloor, \lfloor \frac{m}{d} \rfloor)
$$

考虑求$F(x,y)$

$$
\begin{align}
F(x, y) & = \sum_{i=1}^{x} \sum_{j=1}^{y} ij[(i,j)=1] \\
& = \sum_{i=1}^{x} \sum_{j=1}^{y} ij \sum_{d|(i,j)} \mu (d) \\
& = \sum_{d=1}^{x} \mu (d) \sum_{d|i}^{x} i \sum_{d|j}^{y} j \\
& = \sum_{d=1}^{x} \mu (d) d^2 \sum_{i=1}^{\lfloor \frac{x}{d} \rfloor} i \sum_{j=1}^{\lfloor \frac{y}{d} \rfloor} j \\
& = \sum_{d=1}^{x} \mu (d) d^2 \frac{\lfloor \frac{x}{d} \rfloor (\lfloor \frac{x}{d} \rfloor +1)}{2} \frac{\lfloor \frac{y}{d} \rfloor (\lfloor \frac{y}{d} \rfloor +1)}{2} \\
\end{align}
$$

带回原式得

$$
\begin{align}
& \sum_{d=1}^{n} d F(\lfloor \frac{n}{d} \rfloor, \lfloor \frac{m}{d} \rfloor) \\
= & \sum_{d=1}^{n} d \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu (i) i^2 \frac{\lfloor \frac{\lfloor \frac{n}{d} \rfloor}{i} \rfloor (\lfloor \frac{\lfloor \frac{n}{d} \rfloor}{i} \rfloor +1)}{2} \frac{\lfloor \frac{\lfloor \frac{m}{d} \rfloor}{i} \rfloor (\lfloor \frac{\lfloor \frac{m}{d} \rfloor}{i} \rfloor +1)}{2} \\
= & \sum_{d=1}^{n} d \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu (i) i^2 \frac{\lfloor \frac{n}{di} \rfloor (\lfloor \frac{n}{di} \rfloor +1)}{2} \frac{\lfloor \frac{m}{di} \rfloor (\lfloor \frac{m}{di} \rfloor +1)}{2} \\
\end{align}
$$

现在已经可以$O(\sqrt n \sqrt n) = O(n)$单次查询了,但是不够理想,我们继续化简

令$T=di$,则$i|T, d=T/i$,换掉指标,得

$$
\begin{align}
& \sum_{d=1}^{n} d \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu (i) i^2 \frac{\lfloor \frac{n}{di} \rfloor (\lfloor \frac{n}{di} \rfloor +1)}{2} \frac{\lfloor \frac{m}{di} \rfloor (\lfloor \frac{m}{di} \rfloor +1)}{2} \\
= &
\sum_{T=1}^{n} \frac{\lfloor \frac{n}{T} \rfloor (\lfloor \frac{n}{T} \rfloor +1)}{2} \frac{\lfloor \frac{m}{T} \rfloor (\lfloor \frac{m}{T} \rfloor +1)}{2} \sum_{i|T} \frac{T}{i} \mu (i) i^2 \\
= & \sum_{T=1}^{n} \frac{\lfloor \frac{n}{T} \rfloor (\lfloor \frac{n}{T} \rfloor +1)}{2} \frac{\lfloor \frac{m}{T} \rfloor (\lfloor \frac{m}{T} \rfloor +1)}{2} T \sum_{i|T} \mu (i) i \\
\end{align}
$$

设$g(T)=T \sum_{i|T} \mu (i) i$,我们再设$f(T)=\sum_{i|T} \mu (i) i$那么$g(T)=Tf(T)$,考虑求$f(T)$

在线性筛中,外层为$k$,内层为$p_y$,所以求$f(kp_y)=\sum_{i|kp_y} \mu(i) i$
当$p_y|k$时
当$i$取的数的因子中不包含新加入的$p_y$时,答案就是$f(k)$
当$i$取包含新加入的因子$p_y$时,由于此时$p_y$指数已经$>=2$,所以$\mu (i)=0$,因此贡献为0
综上,当$p_y|k$时,答案为$f(k)$

当$p_y \nmid k$时
当$i$取的数的因子中不包含新加入的$p_y$时,同上,答案是$f(k)$
当$i$取的数的因子包含新加入的$p_y$时,由于指数为$1$,所以我们考虑$i=ap_y$,原式变为

$$
\begin{align}
& \sum_{i|T} \mu(i) i \\
= & \sum_{ap_y|kp_y} \mu (ap_y) ap_y \\
= & p_y \sum_{a|k} \mu (a) \mu(p_y) a \\
= & -p_y \sum_{a|k} \mu(a) a \\
= & -p_y f(k) \\
\end{align}
$$

综上,当$p_y \nmid k$时,答案为$(1-p_y)f(k)$

然后线性筛随便搞搞即可,最后答案就是

$$\sum_{T=1}^{n} \frac{\lfloor \frac{n}{T} \rfloor (\lfloor \frac{n}{T} \rfloor +1)}{2} \frac{\lfloor \frac{m}{T} \rfloor (\lfloor \frac{m}{T} \rfloor +1)}{2} g(T) $$

分块搞搞就行了

【BZOJ】2154: Crash的数字表格的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

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

  2. [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

    题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑N​y=1∑M​lim(x, ...

  3. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

  4. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  5. Bzoj 2154: Crash的数字表格(积性函数)

    2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least ...

  6. bzoj 2154 Crash的数字表格(莫比乌斯反演及优化)

    Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...

  7. 【刷题】BZOJ 2154 Crash的数字表格

    Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...

  8. BZOJ 2154 Crash的数字表格

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2154 题意: 思路: i64 mou[N]; void init(int N){    ...

  9. ●BZOJ 2154 Crash的数字表格

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2154 题解: 莫比乌斯反演. 题意还是很清楚的,就不赘述了. 显然有 $ANS=\sum_{ ...

  10. BZOJ 2154 Crash的数字表格 ——莫比乌斯反演

    求$\sum_{i=1}^n\sum_{j=1}^n lcm(i,j)$ 枚举因数 $ans=\sum_{d<=n} F(d) * d$ $F(d)$表示给定范围内两两$\sum_{gcd(i, ...

随机推荐

  1. Hihicoder 题目1 : Trie树(字典树,经典题)

    题目1 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编 ...

  2. 游戏主循环(Game Loop)

    游戏主循环是游戏的心跳,一般使用while循环进行主动刷新. 一次循环由获取用户输入.更新游戏状态.处理AI.播放音乐和绘制画面组成. 这些行为可以分成两类: update_game(); // 更新 ...

  3. EMC DATA DOMAIN 2200 filesys destroy(數據清空及重建)

    EMC 數據清空 1.數據清空 這裡會清空file system的所有東西包括tapes

  4. <转>WCF中出现死锁或者超时

    WCF回调中的死锁 一.服务器端死锁 对于如下服务: [ServiceContract(CallbackContract = typeof(INotify))] public class Downlo ...

  5. 动软MySQL存储过程模板

    <#@ template language="c#" HostSpecific="True" #><#@ output extension= ...

  6. outlook备份及恢复

    outlook备份及恢复 Reference: http://wenku.baidu.com/link?url=2gtDkCSDoPdnfx3Ungd6on9wdhUTWgbO_vmmKLv1i4df ...

  7. 配置ogg异构oracle-mysql 双向同步注意事项

    双向同步需要考虑的是怎么解决循环复制,以及同时更新一张表以谁为基准. 配置过程就不写了,大致和oracle到mysql的单向+mysql到oracle的单向差不多. 需要注意的有如下几点: 1.ora ...

  8. pythonchallenge之C++学习篇-00

    前言 最近学习下C++,之前是python的用户,python解释器有诸多实现,其中最出名的要数C实现了,而且很多python的扩展模块可能要用C或者C++来写的,所以很有必要学习下C++了 为了避免 ...

  9. ObCallback回调钩子检测

    ObCallback回调钩子检测 2013-12-20 Nie.Meining Ring0 在 PatchGuard 的摧残下,通过 ObRegisterCallbacks 函数注册回调钩子已经成了 ...

  10. redis如何安装

    http://www.redis.net.cn/download/ (1)下载,解压,编译: $ wget http://download.redis.io/releases/redis-3.0.6. ...