●BZOJ 2154 Crash的数字表格
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=2154
题解:
莫比乌斯反演。
题意还是很清楚的,就不赘述了。
显然有
$ANS=\sum_{i=1\;j=1}^{n\;m} lcm(i,j)$
化为较为熟悉的gcd形式:
$\quad\quad=\sum_{i=1\;j=1}^{n\;m} \frac{i \times j}{gcd(i,j)}$
令$g$为gcd的值,$F(n,m)=\sum i\times j,满足1\leq i \leq \lfloor \frac{n}{g}\rfloor,1\leq j \leq \lfloor \frac{m}{g} \rfloor,且gcd(i,j)=1$
那么,$ANS=\sum_{g=1}^{min(n,m)} g\times F(n,m)$
如果已知$F(n,m)$的值,那么ANS就可以在$O\sqrt N$的复杂度内求出。
接下来看看对于一个确定的g,$F(n,m)$怎么求
即我们要求满足$1\leq i \leq \lfloor \frac{n}{g}\rfloor,1\leq j \leq \lfloor \frac{m}{g} \rfloor$,且$gcd(i,j)=1$的所有$i \times j$的和
还记得这个题么?●HDU 1695 GCD,让求的是满足上述条件的$(i,j)$的对数。
我们仍可以类似地去求:(令$x=\lfloor \frac{n}{g}\rfloor,y=\lfloor \frac{m}{g} \rfloor$)
令$t(k)为gcd(i,j)=k的i\times j的和$
$T(k)为gcd(x,y)=\lambda k的i\times j的和$
显然$T(k)=\sum_{k|d}{f(d)}$,即T为t的倍数关系和函数
考虑一下如何计算T(k)。
首先i的取值有:$k,2k,3k,\cdots,\lfloor \frac{x}{k} \rfloor k$
首先j的取值有:$k,2k,3k,\cdots,\lfloor \frac{y}{k} \rfloor k$
任意的两两组合都是T(k)的一部分。
令$sum(a,b)=\frac{(1+a)a}{2}\times\frac{(1+b)b}{2}$
所以$T(k)=k^2\times sum(\lfloor \frac{x}{k} \rfloor,\lfloor \frac{y}{k} \rfloor)$
那么由莫比乌斯反演公式的形式二(倍数关系那个式子):
$t(k)=\sum_{k|d}\mu(\frac{d}{k})T(d)$
$\quad\quad=\sum_{k|d}\mu(\frac{d}{k})d^2\times sum(\lfloor \frac{x}{d} \rfloor,\lfloor \frac{y}{d} \rfloor)$
而我们要求的是t(1),所以
$t(1)=\sum_{d=1}^{min(\lfloor \frac{n}{g}\rfloor,\lfloor \frac{m}{g}\rfloor)}\mu(d)d^2\times sum(\lfloor \frac{x}{d} \rfloor,\lfloor \frac{y}{d} \rfloor)$
显然,这个式子也可以在$O\sqrt N$的复杂度内求出。
所以综上,时间复杂度为$O(N)$
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 10000050
using namespace std;
const int mod=20101009;
int mu[MAXN],pmui2[MAXN];
void Sieve(int n){
static bool np[MAXN];
static int prime[MAXN],pnt;
mu[1]=pmui2[1]=1;
for(int i=2;i<=n;i++){
if(!np[i]) prime[++pnt]=i,mu[i]=-1;
for(int j=1;j<=pnt&&i<=n/prime[j];j++){
np[i*prime[j]]=1;
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
else{mu[i*prime[j]]=0; break;}
}
pmui2[i]=(pmui2[i-1]+1ll*mu[i]*i%mod*i%mod)%mod;
}
}
int sum(int n,int m){
return (1ll*(1+n)*n/2%mod)*(1ll*(1+m)*m/2%mod)%mod;
}
int F(int n,int m){
int mini=min(n,m),ret=0;
for(int d=1,last;d<=mini;d=last+1){
last=min(n/(n/d),m/(m/d));
ret=(1ll*ret+1ll*(pmui2[last]-pmui2[d-1]+mod)%mod*sum(n/d,m/d)%mod)%mod;
}
return ret;
}
int main(){
int n,m,mini,ans=0;
scanf("%d%d",&n,&m); mini=min(n,m);
Sieve(mini);
for(int g=1,last;g<=mini;g=last+1){
last=min(n/(n/g),m/(m/g));
ans=(1ll*ans+1ll*(g+last)*(last-g+1)/2%mod*F(n/g,m/g)%mod)%mod;
}
printf("%d\n",(ans+mod)%mod);
return 0;
}
●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的数字表格 ——莫比乌斯反演
求$\sum_{i=1}^n\sum_{j=1}^n lcm(i,j)$ 枚举因数 $ans=\sum_{d<=n} F(d) * d$ $F(d)$表示给定范围内两两$\sum_{gcd(i, ...
随机推荐
- 使用Flask-SQLAlchemy管理数据库
SQLAlchemy 是一个很强大的关系型数据库框架,处于数据库抽象层 ,支持多种数据库后台. 提供了高层 ORM,也提供了使用数据库原生 SQL 的低层功能. 安装Flask-SQLAlchemy ...
- 201621123060《JAVA程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- 关于python中的operator.itemgetter()函数的用法
1. operator.itemgetter(num)函数 表示对对象的第num维数据进行操作获取. >>>import operator >>>a = [1, 2 ...
- Flask 学习 十二 用户评论
评论在数据库中的表示 由于评论和2个模型有关系,分别是谁发了评论,以及评论了哪个文章,所以这次要更新数据库模型 models.py 创建用户评论数据库模型 class Comment(db.Model ...
- CentOS 7 安装Graphite
Graphite简介 Graphite是一个Python编写的企业级开源监控工具,采用django框架,用来收集服务器所有的即时状态,用户请求信息,Memcached命中率,RabbitMQ消息服务器 ...
- CentOS 7 PHP-redis扩展安装,浏览器不显示数据及redis无法储存数据常见问题解决办法
首先使用php -m 可以查看到自己安装了那些扩展. 1.使用wget下载redis压缩包 wget https://github.com/phpredis/phpredis/archive/deve ...
- rsync 自动创建目录的坑点
rsync同步文件有三种模式: 1.把源站路径下某个文件,同步到目标路径.例如rsync -aR /data/1/2/3/a.txt 1.1.1.1:/data/ ,目标机器将自动创建多层目录存放a. ...
- EasyUI Datagrid 分页的情况下实现点击表头的小三角图标对数据库中所有数据重新排序
说明一下: 当点击 datagrid 表头某一列的小三角图标时,easyui 本身是有排序的,但是在当我们对 datagrid 进行了分页的情况下,点击排序只是对当前页的数据进行排序,而需求需要我对数 ...
- Nokia大事录
1994年,接通中国第一个GSM电话. 1995年,接通中国第一个无线数据电话. 1996年,接通中国第一个GSM1800网络电话.首家推出同时支持简繁中文短讯的移动电话--诺基亚8110. 199 ...
- GIT入门笔记(14)- 链接到远程仓库
1.远程仓库地址https://github.com/ 2.注册远程仓库账号 3.生成ssh-key,并配置到github 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以, ...