题目名称 1886. [国家集训队 2011] Crash的数字表格
输入输出 nt2011_table.in/out
难度等级 ★★★
时间限制 2000 ms (2 s)
内存限制 512 MiB
测试数据 20
题目来源 Gravatarcstdio 于2014-12-17加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:101, 提交:241, 通过率:41.91%
Gravatar神利·代目 100 1.582 s 242.97 MiB C++
Gravatarkito 100 1.885 s 59.42 MiB C++
GravatarGo灬Fire 100 2.377 s 162.44 MiB C++
Gravatarmikumikumi 100 2.508 s 124.29 MiB C++
GravatarONCE AGAIN 100 2.610 s 124.28 MiB C++
GravatarONCE AGAIN 100 2.614 s 124.28 MiB C++
GravatarL_in 100 2.814 s 124.29 MiB C++
Gravatar>.< 100 3.381 s 93.77 MiB C++
Gravatar哒哒哒哒哒! 100 3.401 s 238.73 MiB C++
Gravatar真呆菌 100 3.622 s 57.51 MiB C++
关于 Crash的数字表格 的近10条评论(全部评论)
25题斩
GravatarNew World
2017-01-04 14:18 7楼
被Int64和longlong卡出祥
Gravatarstone
2016-02-03 21:09 6楼
咦?好奇怪啊……为什么筛F(n)的时候对素数定义$F(p) = mod + 1 - p$会挂但是定义成$F(p) = 1 - p$最后再判断正负就是对的?= =
呃我写一下推导过程吧,练练$\LaTeX{}$ ……
\begin{align}
Ans = & \sum_{a=1}^N \sum_{b=1}^M lcm(a, b) \\
=& \sum_{d=1}^{ \min(N, M)} \sum_{i=1}^{\lfloor {N/d} \rfloor} \sum_{j=1}^{\lfloor {M/d} \rfloor } [\gcd(i, j) = 1] i j d\\
= &\sum_{d=1}^{ \min(N, M)} \sum_{i=1}^{\lfloor {N/d} \rfloor} \sum_{j=1}^{\lfloor {M/d} \rfloor } \sum_{t | i \land t | j} \mu (t) i j d\\
考虑直接枚举t*d,&用i*d,j*d,\frac{td}{t}分别替换i, j, d;\\
Ans =& \sum_{td=1}^{ \min(N, M)} td \sum_{t | td} \mu (t) t \sum_{i=1}^{\lfloor {N/td} \rfloor } \sum_{j=1}^{\lfloor {M/td} \rfloor } i j \\
设F(n) = &\sum_{t | n} \mu (t) t ;\\
则Ans = & \sum_{td=1}^{ \min(N, M)} td F(td) \sum_{i=1}^{\lfloor {N/td} \rfloor } \sum_{j=1}^{\lfloor {M/td} \rfloor } i j
\end{align}
再来看F函数:
先直接用定义证明F是积性函数,然后直接套欧拉筛法:

F[1] = 1;
for(int i = 2;i <= Min;++i){
if(!notp[i])prime[cnt++] = i, F[i] = 1 - i;
for(int j = 0;j < cnt;++j){
int t = i * prime[j];
if(t > Min)break;
notp[t] = true;
if(i % prime[j] == 0){//miu(i * prime[j]) == 0
F[t] = F[i];
break;
}
F[t] = (LL)F[i] * F[prime[j]] % mod;
}
}
GravatarAsm.Def
2015-02-04 13:40 5楼
回复 @cstring :
是一种论文排版的工具
GravatarAsm.Def
2015-02-04 09:44 4楼
回复 @Asm.Def :
LATEX是什么。。。。
Gravatar天一阁
2015-02-04 07:27 3楼
我这个SB竟然在用了O(n)线性筛的情况下,拼命把求ans优化到O(sqrt(n))
Gravatar天一阁
2015-02-02 11:51 2楼
出题人你标程炸了(╯‵□′)╯︵┻━┻
数据已修复
Gravatarcstdio
2014-12-18 20:10 1楼

1886. [国家集训队 2011] Crash的数字表格

★★★   输入文件:nt2011_table.in   输出文件:nt2011_table.out   简单对比
时间限制:2 s   内存限制:512 MiB

【问题描述】

今天的数学课上,$Crash$ 小朋友学习了最小公倍数($Least$ $Common$ $Multiple$)。对于两个正整数 $a$ 和 $b$,$LCM(a, b)$ 表示能同时整除 $a$ 和 $b$ 的最小正整数。例如,$LCM(6, 8) = 24$。
回到家后,$Crash$ 还在想着课上学的东西,为了研究最小公倍数,他画了一张 $N*M$ 的表格。每个格子里写了一个数字,其中第 $i$ 行第 $j$ 列的那个格子里写着数为 $LCM(i, j)$。一个 $4*5$ 的表格如下:

看着这个表格,$Crash$ 想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当 $N$ 和 $M$ 很大时,$Crash$ 就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题。由于最终结果可能会很大,$Crash$ 只想知道表格里所有数的和 $mod$ $20101009$ 的值。

【输入格式】

输入的第一行包含两个正整数,分别表示 $N$ 和 $M$。

【输出格式】

输出一个正整数,表示表格中所有数的和 $mod$ $20101009$ 的值。

【样例输入】

4 5

【样例输出】

122

【数据规模和约定】

$30\%$ 的数据满足 $N, M\le 10^3$。
$70\%$ 的数据满足 $N, M\le 10^5$。
$100\%$ 的数据满足 $N, M\le 10^7$。

【试题来源】

$2011$ 中国国家集训队命题答辩