快三个月没做反演题了吧……

感觉高一上学期学的全忘了……

所以还得从零开始学推式子。

# 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的更多相关文章

  1. 【反演复习计划】【51nod1594】Gcd and Phi

    现在感觉反演好多都是套路QAQ…… #include<bits/stdc++.h> using namespace std; ; typedef long long ll; int n,c ...

  2. 【反演复习计划】【COGS2432】爱蜜莉雅的施法

    也是一个反演. 第一次手动推出一个简单的式子,激动.jpg 原题意思是求:$Ans=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\phi(gcd(i,j))$随 ...

  3. 【反演复习计划】【bzoj4407】于神之怒加强版

    #include<bits/stdc++.h> #define N 5000010 #define yql 1000000007 using namespace std; typedef ...

  4. 【反演复习计划】【COGS2433】&&【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法

    同bzoj3930. (日常盗题图) #include<bits/stdc++.h> #define N 1000010 #define yql 1000000007 #define ll ...

  5. 【反演复习计划】【COGS2431】爱蜜莉雅的求助

    出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅…… 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽…… 不过抱图跑23333首先这很像约数个数和函数诶!但是唯 ...

  6. 【反演复习计划】【bzoj2154】Crash的数字表格

    膜拜cdc……他的推导详细到我这种蒟蒻都能看得懂! 膜拜的传送门 所以我附一下代码就好了. #include<bits/stdc++.h> #define N 10000005 #defi ...

  7. 【反演复习计划】【bzoj3529】数表

    Orz PoPoQQQ大爷 按照他ppt的解法,这题可以划归到之前的题了OrzOrz 跪wy写的题解(Stealth Assassin)https://www.luogu.org/wiki/show? ...

  8. 【反演复习计划】【bzoj3994】DZY loves maths

    这题大概就是提取一下d,然后就跟前面的题目差不多了. #include<bits/stdc++.h> #define N 10000005 using namespace std; typ ...

  9. 【反演复习计划】【bzoj3994】约数个数和

    首先要用数学归纳证明一个结论,不过因为我实在是懒得打公式了... 先发代码吧. #include<bits/stdc++.h> #define N 50005 using namespac ...

随机推荐

  1. Spring Cloud文档地址大全

    Spring Cloud:http://cloud.spring.io/spring-cloud-static/spring-cloud.html Spring Cloud Config:http:/ ...

  2. URAL 1736 Chinese Hockey(网络最大流)

    Description Sergey and Denis closely followed the Chinese Football Championship, which has just come ...

  3. JavaSE复习(四)File类与IO流

    File类 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例. public File(String parent ...

  4. Python中运算符"=="和"is"的差别分析

    前言 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识).python type()(数据类型)和value(值).is和==都是对对象进行比 ...

  5. Android java.lang.NoClassDefFoundError的错误

    在开发过程中,遇到一个这样的问题:java.lang.NoClassDefFoundError: android.support.v4.util.SparseArrayCompat,这个问题很奇怪,J ...

  6. 【Autofac】- 创建的类的生命周期

    1.InstancePerDependency 对每一个依赖或每一次调用创建一个新的唯一的实例.这也是默认的创建实例的方式. 官方文档解释:Configure the component so tha ...

  7. hihocoder 1457(后缀自动机+拓扑排序)

    题意 给定若干组由数字构成的字符串,求所有不重复子串的和(把他们看成十进制),答案mod(1e9+7) 题解: 类似后缀数组的做法,把字符串之间用':'连接,这里用':'是因为':'的ascii码恰好 ...

  8. POJ 3415 后缀数组+单调栈

    题目大意: 给定A,B两种字符串,问他们当中的长度大于k的公共子串的个数有多少个 这道题目本身理解不难,将两个字符串合并后求出它的后缀数组 然后利用后缀数组求解答案 这里一开始看题解说要用栈的思想,觉 ...

  9. BZOJ2819 Nim 【dfn序 + lca + 博弈论】

    题目 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的. ...

  10. 在iis上部署ssl证书 https

    1.取走证书下载下来的文件.解压iis的压缩包. 2.打开internet信息服务iis管理器 3.双击打开后,选择导入,导入我们刚刚解压得到的pfx文件,这个pfx文件就是你需要部署域名的那个文件. ...