P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
又一道。。。分数和取模次数成正比$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 莫比乌斯反演的更多相关文章
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...
- [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
---题面--- 题解: $$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$ 改成枚举d(设n < m) $$ans ...
- luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...
- 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告
[国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB
推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
传送门 式子好麻烦orz……大佬好腻害orz->这里 //minamoto #include<iostream> #include<cstdio> #define ll ...
- 洛谷 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 ...
- 题解-[国家集训队]Crash的数字表格 / JZPTAB
题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...
随机推荐
- JAVA-三大语句(选择语句、条件语句、循环语句)
跳出指定的for循环体,和goto很像 1 K:for(int i=0;i<3;i++){//给这个for循环体取一个名字为K 2 for(int j=0;j<3;j++){ 3 if(j ...
- python的easygui
1.利用msgbox(单词messagebox的缩写)给出一个提示信息: import easygui as g reply=g.msgbox('This is a basic message box ...
- j2ee项目Java代码性能优化要点(抄书)
亚信联创科技出版的. 1.与log4j有关的性能问题 Logger对象的标准定义方式: private static transient Logger log=Logger.getLogger(cre ...
- struts2的结果类型
1.从struts-default.xml入手,得到结果类型列表以及对应的处理类: <result-types> <!-- 转发到action --> <result-t ...
- 常见排序算法-php
1.归并排序 $a = [1, 4, 6, 8, 10, 14, 16]; $b = [2, 3, 5, 8, 9, 11]; function merge_sort($a, $b) { $a_i = ...
- java反射中Class对象详解和类名.class, class.forName(), getClass()区别
1.获得类型类 可以看到,对象a是A的一个实例,A是某一个类,在if语句中使用a.getClass()返回的结果正是类A的类型类,在Java中表示一个特定类型的类型类可以用“类型.class”的方式获 ...
- <十五>UML核心视图动态视图之活动图
一:动态视图 --->动态视图是描述事物动态行为的. --->需要注意的是:动态视图不能够独立存在,它必需特指一个静态视图活uml元素,说明在静态视图规定的事物结构下它们的动态行为. -- ...
- 「USACO15FEB」「LuoguP3121」审查(黄金)Censoring (Gold)(AC自动机
题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...
- 恋恋风辰 对于redis底层框架的理解(一)
近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了. 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initser ...
- 三台主机搭建LAMP(apache、mariadb、php)
实验环境:均是CentOS7 httpd:172.16.254.88 2.4.6 PHP:172.16.250.140 5.4.16 mariadb:172.16.250.94 5.5.52 第三 ...