【BZOJ】2154: Crash的数字表格
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的数字表格的更多相关文章
- 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)
BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...
- [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∑Ny=1∑Mlim(x, ...
- [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- Bzoj 2154: Crash的数字表格(积性函数)
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least ...
- bzoj 2154 Crash的数字表格(莫比乌斯反演及优化)
Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...
- 【刷题】BZOJ 2154 Crash的数字表格
Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...
- BZOJ 2154 Crash的数字表格
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2154 题意: 思路: i64 mou[N]; void init(int N){ ...
- ●BZOJ 2154 Crash的数字表格
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2154 题解: 莫比乌斯反演. 题意还是很清楚的,就不赘述了. 显然有 $ANS=\sum_{ ...
- 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, ...
随机推荐
- 【数据库】 防止sql注入,过滤敏感关键字
private bool FilterIllegalChar(string sWord) { var result = false; var keyWord = @"select|inser ...
- [Eclipse] Eclipse字体问题解决
背景: Eclipse的字体总感觉有点问题,其中中文字体太小,不方便查看,今天网上搜索了一下,解决了问题,记录下来: 解决办法: Window --> Preferences --> Ge ...
- 在Salesforce中实现对Object的增删改查操作
1): Insert Statement http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#CSHID=ap ...
- [转载]C/C++可变参数之va_start和va_end使用详解
本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解. 介绍这两 ...
- 开发Portlet第一步:如何基于Crystal开发静态Portlet?
当团队需要基于Crystal开发Porltet时,分为以下三部: 基于Crystal开发静态Portlet 基于将静态Portlet修改为基于测试数据的动态Portlet 将动态Portlet与动态数 ...
- Liferay 6.2 改造系列之五:修改默认站点的页面内容
相关页面可以通过/portal-master/portal-impl/src/portal.properties文件配置进行修改: 登录页: ## ## Default Landing Page ## ...
- (转)sscanf() - 从一个字符串中读进与指定格式相符的数据
(转)sscanf() - 从一个字符串中读进与指定格式相符的数据 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, stri ...
- HTML DOM学习之三
1.创建新的HTML元素:appendChild(); 如需向HTML DOM添加元素,首先必须创建该元素,然后把它追加到已有的元素上: <div id="div1"> ...
- 线段树(区间合并) LA 3989 "Ray, Pass me the dishes!"
题目传送门 题意:动态最大连续子序列和,静态的题目 分析:nlogn的归并思想.线段树维护结点的三个信息,最大前缀和,最大后缀和,该区间的最大和的两个端点,然后答案是三个的better.书上用pair ...
- BFS(双向) HDOJ 3085 Nightmare Ⅱ
题目传送门 题意:一个人去救女朋友,两个人都在运动,还有鬼在"扩散",问最少几秒救到女朋友 分析:开两个队列来表示两个人走过的路,一个人走到的地方另一个人已经vis了,那么就是相遇 ...