【反演复习计划】【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 ...
随机推荐
- kill命令详解
基础命令学习目录首页 原文链接:https://www.cnblogs.com/wangcp-2014/p/5146343.html 1.命令格式: kill[参数][进程号] 2.命令功能: 发送指 ...
- http长连接和短连接以及连接的本职
HTTP长连接和短连接原理浅析 本文主要讲了,http长连接本质是tcp的长连接. 网络通信过程中,建立连接的本质是什么? 连接的本质 建立连接这个词,是从早期的电话系统中来的,那个时候,“建立连接” ...
- lintcode-95-验证二叉查找树
95-验证二叉查找树 给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值. 节点的右子树中的值要严格大于该节点的值. 左右子树也必须是二 ...
- iOS-SDWebImage的原理以及使用流程
SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.SDWebImage加载图片的流程: 1. 入口 setImageWi ...
- rpc通信模型
1.client_stub是为了屏蔽客户端调用远程主机的对象,而在本地的一个对象存根,存根负责接受本地方法调用,并将其序列化,然后通过网络发送给服务端.
- 前端MVC
闲来没事,画了个张图,是我理解的MVC
- 【BZOJ 1146】[CTSC2008]网络管理Network
树剖+树状数组套线段树O(nlogn^3)(我打的),有一种更加优秀的算法是O(nlogn^2)的就是直接树状数组套线段树欧拉序(并不快),或者是用主席树维护原始的树的信息,同时用树状数组套线段树维护 ...
- 【NOIP模拟赛】Drink 二维链表+模拟
我觉得这道题的主旨应该是模拟,但是如果说他是二维链表的話也不為過.這道題的主體思路就是把原來旋轉點的O(n^2)變成了旋轉邊界的O(n).怎麼旋轉邊界呢,就好像是把原來的那些點都於上下左右四個點連線, ...
- shell里的getopts
By francis_hao Jul 5,2017 getopts是shell的一个内置命令. 概述 getopts optstring name [args]OPTIND,OPTARG,O ...
- javascript中top、clientTop、scrollTop、offsetTop的讲解
下面结合各上图介绍一下各个属性的作用: 一.offsetTop属性: 此属性可以获取元素的上外缘距离最近采用定位父元素内壁的距离,如果父元素中没有采用定位的,则是获取上外边缘距离文档内壁的距离.所谓的 ...