●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 ...
随机推荐
- 详谈C++虚函数表那回事(一般继承关系)
沿途总是会出现关于C++虚函数表的问题,今天做一总结: 1.什么是虚函数表: 虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.简称为V-Table. ...
- 201621123031 《Java程序设计》第3周学习总结
Week03-面向对象入门 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系 ...
- iOS Storyboard unwind segues使用小结
使用storyboard开发的时候,经常会在一个scene上添加一个button,再拖拽这个button到某个想要关联的页面,最后选择push的方式跳转.这样scene_A和scene_B就有了一个& ...
- DES MEI号码加密
对于加密来说,使用DES加密解密很好,但是为了使不同设备的密文不一样,可以使用 固定字符串 + 设备IMEI号码 加密的方式,这样可以分辨不同手机,限制手机的使用(若是注册,一个手机只有一个IMEI号 ...
- Python之旅.第三章.函数3.30
一.迭代器 1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来2.要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象?可迭代的对象:在python中,但凡内置 ...
- django的FBV和CBV
title: python djano CBV FBV tags: python, djano, CBV, FBV grammar_cjkRuby: true --- python django的fu ...
- 数据结构-线性表的链式存储相关算法(C语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
- 移动端登录页面input获取焦点后页面布局及输入框上移的问题
最近切微信页面的时候,发现移动端的登录页面,带输入框的那种,如图: 从页面本身来看没有什么问题,上传至测试服务器,用iphone访问也没有什么问题,但是当同事用Android手机获取焦点后,问题来了, ...
- HTML-----<a>、<table>、<form>解析
超链接 anchor 锚 <a href="url">内容</a> Href Hypertext reference 引用 URL(Uniform Re ...
- 【原创】自己动手实现RPC服务调用框架
自己动手实现rpc服务调用框架 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者).battercake- ...