【反演复习计划】【bzoj1011】zap-queries
快三个月没做反演题了吧……
感觉高一上学期学的全忘了……
所以还得从零开始学推式子。
# bzoj1011
标签(空格分隔): 未分类
---
原题意思是求以下式子:
$Ans=\sum\limits_{i=1}^{a}\sum\limits_{i=1}^{b}[gcd(i,j)==k]$
首先把k拿下来,得到
$Ans=\sum\limits_{i=1}^{a/k}\sum\limits_{i=1}^{b/k}[gcd(i,j)==1]$
然后考虑mobius函数的性质:
$\sum\limits_{d|n}\mu(d)=1(n==1),0(n>1)$
所以可以把那个gcd的式子替换下,得到:
$Ans=\sum\limits_{i=1}^{a/k}\sum\limits_{i=1}^{b/k}\sum\limits_{d|gcd(i,j)}\mu(d)$
我们稍微改写一下这个式子:
$Ans=\sum\limits_{i=1}^{a/k}\sum\limits_{i=1}^{b/k}\sum\limits_{d|i,d|j}\mu(d)$
这个时候我们把$\mu(i)$提前(也就是交换枚举顺序)得到下面的式子:
$Ans=\sum\limits_{d=1}^{min(a/k,b/k)}\mu(d)\sum\limits_{i=1,d|i}^{a/k}\sum\limits_{j=1,d|j}^{b/k}1$
这个式子比较蠢,我们能看出来这个式子的意思就是:
$Ans=\sum\limits_{d=1}^{min(a/k,b/k)}\mu(d)\frac{a/k}{d}\frac{b/k}{d}$
考虑到后者只有$\sqrt{\frac{a}{k}}$种取值
所以下底函数分块,前缀和优化下就能过了。
#include<bits/stdc++.h>
#define N 100005
using namespace std;
typedef long long ll;
int prime[N],mu[N],s[N],vis[N],cnt=;
void calcmu(){
cnt=;mu[]=;memset(vis,,sizeof(vis));
for(int i=;i<N;i++){
if(vis[i])prime[++cnt]=i,mu[i]=-;
for(int j=;j<=cnt;j++){
int t=prime[j]*i;if(t>N)break;
vis[t]=;
if(i%prime[j]==){mu[t]=;break;}
mu[t]=-mu[i];
}
}
s[]=;
for(int i=;i<=N;i++)s[i]=s[i-]+mu[i];
}
ll calc(int n,int m,int k){
n/=k;m/=k;ll ans=;int j=;
if(n>m)swap(n,m);
for(int i=;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
ans+=1LL*(s[j]-s[i-])*(n/i)*(m/i);
}
return ans;
}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
int T=read();calcmu();
while(T--){
int n=read(),m=read(),k=read();
printf("%lld\n",calc(n,m,k));
}
return ;
}
【反演复习计划】【bzoj1011】zap-queries的更多相关文章
- 【反演复习计划】【51nod1594】Gcd and Phi
现在感觉反演好多都是套路QAQ…… #include<bits/stdc++.h> using namespace std; ; typedef long long ll; int n,c ...
- 【反演复习计划】【COGS2432】爱蜜莉雅的施法
也是一个反演. 第一次手动推出一个简单的式子,激动.jpg 原题意思是求:$Ans=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\phi(gcd(i,j))$随 ...
- 【反演复习计划】【bzoj4407】于神之怒加强版
#include<bits/stdc++.h> #define N 5000010 #define yql 1000000007 using namespace std; typedef ...
- 【反演复习计划】【COGS2433】&&【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法
同bzoj3930. (日常盗题图) #include<bits/stdc++.h> #define N 1000010 #define yql 1000000007 #define ll ...
- 【反演复习计划】【COGS2431】爱蜜莉雅的求助
出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅…… 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽…… 不过抱图跑23333首先这很像约数个数和函数诶!但是唯 ...
- 【反演复习计划】【bzoj2154】Crash的数字表格
膜拜cdc……他的推导详细到我这种蒟蒻都能看得懂! 膜拜的传送门 所以我附一下代码就好了. #include<bits/stdc++.h> #define N 10000005 #defi ...
- 【反演复习计划】【bzoj3529】数表
Orz PoPoQQQ大爷 按照他ppt的解法,这题可以划归到之前的题了OrzOrz 跪wy写的题解(Stealth Assassin)https://www.luogu.org/wiki/show? ...
- 【反演复习计划】【bzoj3994】DZY loves maths
这题大概就是提取一下d,然后就跟前面的题目差不多了. #include<bits/stdc++.h> #define N 10000005 using namespace std; typ ...
- 【反演复习计划】【bzoj3994】约数个数和
首先要用数学归纳证明一个结论,不过因为我实在是懒得打公式了... 先发代码吧. #include<bits/stdc++.h> #define N 50005 using namespac ...
随机推荐
- 剑指offer-数值的整数次方12
class Solution: def Power(self, base, exponent): # write code here if base==0: return 0 if exponent= ...
- PhpStorm 配置IDE
IDE => Xdebug => Apache(XAMPP) => Firefox + easist Xdebug 1>XAMPP停止apache服务;2>在安装目录下找 ...
- MySql数据库插入或更新报错:Cannot add or update a child row: a foreign key constraint fails
具体报错信息: Cannot add or update a child row: a foreign key constraint fails (`xxx`.`AAA`, CONSTRAINT `t ...
- STL Allocator
从上面这个程序可以看出,我们这里手动使用了分配器,分配器有很多种类,有std::,还有非std::,也就是上面的__gnu_cxx下面的,我们在使用容器的时候不关心我们使用什么分配器,也不关心我们如何 ...
- IE图片下载
之前要用到图面下载功能,玩上找了好多,方法基本都是直接window.open(src),这样是直接在新打开的窗口中打开图片,并不是下载.考虑到IE的兼容性问题太难找了,好不容易找到一个能用的,所以保存 ...
- 【SSH】——封装参数不确定的分页查询
[前言] 在BS中,分页技术的应用相当频繁.说到分页,简单的分页就很好实现了,如果在分页的基础上再加上业务逻辑,这就使得分页的技术更加的灵活了. [简单分页] 我们先看一种简单的分页,为了做到复用,我 ...
- 安装elasticsearch-1.7.1及中文IK和近义词配置
安装elasticsearch及中文IK和近义词配置 https://www.cnblogs.com/yjf512/p/4789239.html 安装elasticsearch及中文IK和近义词配置 ...
- Android Service的分类详解
按照启动方式分类 谷歌官网对Service的分类 Service根据启动方式分为两类:Started和Bound.其中,Started()是通过startService()来启动,主要用于程序内部使用 ...
- hdu 3033 I love sneakers!(分组背包+每组至少选一个)
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- [洛谷P1337][JSOI2004]平衡点 / 吊打XXX
题目大意:有$n$个重物,每个重物系在一条绳子上.所有绳子系在一起,问绳结最终平衡于何处. 题解:$NOIP$前学学模拟退火,但发现我脸好黑啊... 卡点:脸黑 C++ Code: #include ...