【反演复习计划】【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(i)$
我们稍微改写一下这个式子:
$Ans=\sum\limits_{i=1}^{a/k}\sum\limits_{i=1}^{b/k}\sum\limits_{d|i,d|j}\mu(i)$
这个时候我们把$\mu(i)$提前(也就是交换枚举顺序)得到下面的式子:
$Ans=\sum\limits_{d=1}^{min(a/k,b/k)}\mu(i)\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(i)\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=0;
void calcmu(){
    cnt=0;mu[1]=1;memset(vis,1,sizeof(vis));
    for(int i=2;i<N;i++){
        if(vis[i])prime[++cnt]=i,mu[i]=-1;
        for(int j=1;j<=cnt;j++){
            int t=prime[j]*i;if(t>N)break;
            vis[t]=0;
            if(i%prime[j]==0){mu[t]=0;break;}
            mu[t]=-mu[i];
        }
    }
    s[0]=0;
    for(int i=1;i<=N;i++)s[i]=s[i-1]+mu[i];
}
ll calc(int n,int m,int k){
    n/=k;m/=k;ll ans=0;int j=0;
    if(n>m)swap(n,m);
    for(int i=1;i<=n;i=j+1){
        j=min(n/(n/i),m/(m/i));
        ans+=1LL*(s[j]-s[i-1])*(n/i)*(m/i);
    }
    return ans;
}
inline int read(){
    int f=1,x=0;char ch;
    do{ch=getchar();if(ch==‘-‘)f=-1;}while(ch<‘0‘||ch>‘9‘);
    do{x=x*10+ch-‘0‘;ch=getchar();}while(ch>=‘0‘&&ch<=‘9‘);
    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 0;
}
时间: 2024-10-13 20:50:32

【反演复习计划】【bzoj1011】zap-queries的相关文章

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

现在感觉反演好多都是套路QAQ-- #include<bits/stdc++.h> using namespace std; const int N=2e6+5; typedef long long ll; int n,cnt,prime[N],phi[N],mu[N],vis[N]; ll ans,s[N],f[N]; void calcmu(){ memset(prime,0,sizeof(prime));cnt=0; memset(phi,0,sizeof(phi));memset(mu

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

也是一个反演. 第一次手动推出一个简单的式子,激动.jpg 1 #include<bits/stdc++.h> 2 #define N 10000010 3 using namespace std; 4 typedef long long ll; 5 int n,m,prime[N],cnt,vis[N]; 6 ll f[N]; 7 void calcpre(){ 8 f[1]=1;cnt=0;memset(vis,1,sizeof(vis)); 9 for(int i=2;i<=N;i

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

膜拜cdc--他的推导详细到我这种蒟蒻都能看得懂! 膜拜的传送门 所以我附一下代码就好了. #include<bits/stdc++.h> #define N 10000005 #define yql 20101009 using namespace std; typedef long long ll; int mu[N],prime[N],cnt,s[N],vis[N]; ll n,m,ans,maxn; inline ll sum(ll x,ll y){ return ((x*(x+1)/

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

Orz PoPoQQQ大爷 按照他ppt的解法,这题可以划归到之前的题了OrzOrz 1 #include<bits/stdc++.h> 2 #define N 100005 3 #define fi first 4 #define sc second 5 using namespace std; 6 typedef long long ll; 7 int Q,maxn,cnt,prime[N],mu[N],d[N]; 8 int c[10*N],ans[N],vis[N]; 9 pair&l

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

出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅-- 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽-- 不过抱图跑23333 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll n; 5 ll calcsum(ll n){ 6 int m=(int)sqrt(n+0.5); 7 ll cnt=0,ans=0; 8 for(int i=1;i<=

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

同bzoj3930. (日常盗题图) #include<bits/stdc++.h> #define N 1000010 #define yql 1000000007 #define ll long long using namespace std; int n; ll m,l,r,k;ll f[N]; ll Pow(ll x,int y){ ll ans=1; while(y){if (y&1) ans=ans*x%yql; x=x*x%yql; y>>=1; } ret

最近的一些复习计划

来中软培训三个月了,交了很多"乱七八糟"的东西,感觉像灌水一样往脑袋里面灌,没怎么吸收好.而且学得也差,是时候重新梳理一下知识了. 总结一下,一共学习了以下知识: 1.html.css.javascript.JQuery.Json.Ajax 2.servlet.xml.JSP.log4j 3.mysql.Oracle 4.JAVA.github.SSH(还未开始学习) 现制定以下复习计划,保证每天按时完成. 1.html.css.javascript.JQuery共计四天. 2.ser

2016考研数学三复习计划

一.学习阶梯划分: 一阶基础 全面复习(3月-6月) 二阶强化 熟悉题型(7月-10月) 三阶模考 查缺补漏(11月-12月15日) 四阶点睛 保持状态(12月16日-考试前) 二.参考书目 : 必备参考资料: 数学考试大纲 <高等数学>同济版:讲解比较细致,例题难度适中,涉及内容广泛,是现在高校中采用比较广泛的教材,配套的辅导教材也很多. <线性代数>同济版:轻薄短小,简明易懂,适合基础不好的学生.<线性代数>清华版:适合基础比较的学生 <概率论与数理统计初步&

算法复习计划

写在前面 随着四月的到来, 离省选越来越近了. 从NOIP到现在, 学到了很多很多东西, 有的学的比较深入, 有的只是略知一二 从明天开始, 进行针对省选的算法复习计划. 省选前完成. 重点是对算法的理解和应用, 还会注重模板习惯的养成 计划内容 1. 数据结构 一直觉得我数据结构学的还可以, 不过列出来发现会的也没多少. 少就少吧, 省选够用就行... 线段树 树状数组 并查集 哈希表 STL treap splay 树链剖分 主席树(可忽略) 字符串(KMP, 后缀数组) 2. 图论 掌握经