●BZOJ 2693 jzptab
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=2693
题解:
莫比乌斯反演
先看看这个题,BZOJ 2154 Crash的数字表格,本题的升级版:改为了多组数据。
既然是多组数据,那么之前的$O(N)$的方法就不行了。
现在需要对求ANS的式子进行优化,看看能不能降低复杂度。
$ANS=\sum_{g=1}^{min(n,m)}g\times \sum_{d=1}^{min(\lfloor \frac{n}{g} \rfloor,\lfloor \frac{m}{g} \rfloor)} \mu(d)d^2sum(\lfloor \frac{n}{gd} \rfloor,\lfloor \frac{m}{gd} \rfloor)$
令$D=gd$,然后去枚举D,则
$\quad\quad=\sum_{D=1}^{min(n,m)}sum(\lfloor \frac{n}{D} \rfloor,\lfloor \frac{m}{D} \rfloor) \sum_{d|D} \frac{D}{d}\mu(d)d^2$
$\quad\quad=\sum_{D=1}^{min(n,m)}sum(\lfloor \frac{n}{D} \rfloor,\lfloor \frac{m}{D} \rfloor) \sum_{d|D} dD\times\mu(d)$
令$w[D]=\sum_{d|D} dD\times\mu(d)$,所以
$ANS=\sum_{D=1}^{min(n,m)}sum(\lfloor \frac{n}{D} \rfloor,\lfloor \frac{m}{D} \rfloor) w[D]$
如果可以求出$w[D]$的值,那么这个求ANS的式子就可以用上向下取整的特性,以$O(\sqrt N)$的复杂度求出。
而至于$w[D]$求法,注意到这个也是积性函数,可以在线性筛时求出:
1.对于一个质数p,$w[p]=1\times p\times 1+p\times p \times(-1)$
2.对于枚举到的i和质数p,
如果i%p!=0,则运用积性函数的性质:$w[i\times p]=w[i]\times w[p]$
否则,不难发现,新增的p导致产生的其他加项中$\mu(d)=0$,所以直接$w[i\times p]=w[i]\times p$
(w[ ]的推导仔细想想哈,其实并不麻烦的)
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 10000050
using namespace std;
const int mod=100000009;
int w[MAXN],pw[MAXN];
void Sieve(){
static bool np[MAXN];
static int prime[MAXN],pnt;
w[1]=1,pw[1]=1;
for(int i=2;i<=10000000;i++){
if(!np[i]) prime[++pnt]=i,w[i]=((1ll*i-1ll*i*i%mod)%mod+mod)%mod;
for(int j=1;j<=pnt&&i<=10000000/prime[j];j++){
np[i*prime[j]]=1;
if(i%prime[j]) w[i*prime[j]]=((-1ll*w[i]*prime[j]%mod*prime[j]%mod+mod)%mod+1ll*w[i]*prime[j]%mod)%mod;
else{w[i*prime[j]]=1ll*w[i]*prime[j]%mod; break;}
}
pw[i]=(1ll*pw[i-1]+w[i])%mod;
}
}
int sum(int n,int m){
return ((1ll*(1+n)*n/2%mod)*(1ll*(1+m)*m/2%mod))%mod;
}
int main(){
Sieve(); int Case,n,m,ans,mini;
scanf("%d",&Case);
for(int i=1;i<=Case;i++){
scanf("%d%d",&n,&m);
ans=0; mini=min(n,m);
for(int d=1,last;d<=mini;d=last+1){
last=min(n/(n/d),m/(m/d));
ans=(1ll*ans+1ll*(pw[last]-pw[d-1]+mod)%mod*sum(n/d,m/d)%mod)%mod;
}
printf("%d\n",(ans+mod)%mod);
}
return 0;
}
●BZOJ 2693 jzptab的更多相关文章
- 【莫比乌斯反演】关于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 2693: jzptab 线性筛积性函数
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 444 Solved: 174[Submit][Status][Discus ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- BZOJ 2693: jzptab( 莫比乌斯反演 )
速度居然#2...目测是因为我没用long long.. 求∑ lcm(i, j) (1 <= i <= n, 1 <= j <= m) 化简之后就只须求f(x) = x∑u( ...
- BZOJ 2693 jzptab
http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题解: 考虑把lcm转化成gcd那答案就是然后神奇的设:就有:一样可以枚举 的取值,这是O(√ ...
- BZOJ 2693 jzptab ——莫比乌斯反演
同BZOJ 2154 但是需要优化 $ans=\sum_{d<=n}d*\sum_{i<=\lfloor n/d \rfloor} i^2 *\mu(i)* Sum(\lfloor \fr ...
- 【刷题】BZOJ 2693 jzptab
Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample Input 1 4 5 Sa ...
- BZOJ 2693: jzptab 莫比乌斯反演 + 积性函数 +筛法
Code: #include<bits/stdc++.h> #define ll long long #define M 10001000 #define maxn 10200100 #d ...
随机推荐
- 2017-2018-1 1623 bug终结者 冲刺001
bug终结者 冲刺001 冲刺阶段任务分配 任务 工作量比例 完成时间 负责人 第一篇博客:各个成员的任务安排 1/7 12月1日 20162322 朱娅霖 第二篇博客:欢迎界面,主菜单界面 1/7 ...
- 使用XIB的UITableViewCell自适应,以及出现的问题进行解决
1.首先需要定义一个属性 @property (nonatomic, strong) UITableViewCell *prototypeCell; 2.在创建完tableView后加上如下代码 se ...
- 22.C++- 继承与组合,protected访问级别
在C++里,通过继承和组合实现了代码复用,使得开发效率提高,并且能够通过代码看到事物的关系 组合比继承简单,所以在写代码时先考虑能否组合,再来考虑继承. 组合的特点 将其它类的对象作为当前类的成员使用 ...
- div+css命名规则
作为一个前端菜鸟,进公司的第一个项目就是中途从外包公司接过来的公司网站,在别人写过了的基础上接着写,命名什么的,简直不要太痛苦. 目前,这个网站已经完成,但是被后台人员指出命名不规范.有心想解释一两句 ...
- nyoj 仿射密码
仿射密码 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合.其加密变换如下: E(m)=(k1*m+k2) ...
- 微信开发之SVN提交代码与FTP同步到apache的根目录
SVN是协同开发的,版本控制器,就是几个人同时开发,可以提交代码到SVN服务器,这样就可以协同开发,一般是早上上班首先更新下代码,然后自己修改代码 工作一天之后,修改代码之后,下班之前,更新代码,然后 ...
- 分布式版本控制系统Git的安装及使用
Git的安装分为客户端安装和服务端安装,鉴于我平时码代码在windows环境下,因此本文客户端安装直接在windows环境,服务端安装在linux环境下(centos). Git客户端安装 客户端下载 ...
- Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber ...
- MYSQL之库操作
一.系统数据库 information_schema :虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等 mysql:核心数据库,里面包含用户.权限. ...
- Spring(二):Spring框架&Hello Spring
Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架. Spring 框架 ...