题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3529

题目大意:令F(i)为i的约数和,多次询问对于1<=x<=n,1<=y<=m,F(gcd(x,y))<=a的所有数对(x,y),求ΣF(gcd(x,y))%(2^31)

n,m<=10^5,a<=10^9

首先如果不考虑a的限制 令g(i)为1<=x<=n,1<=y<=m,gcd(x,y)=i的数的个数

那么显然有

利用线性筛处理出F(i) 那么答案显然是

治好了我多年的公式恐惧症。。。

现在我们只需要求出的前缀和 这个问题就能在O(√n)的时间内出解

枚举每一个i 枚举i的倍数 暴力即可求出这个函数 然后处理前缀和即可 复杂度是O(nlogn)的

那么现在有了a的限制怎么搞呢?

我们发现对答案有贡献的i只有F(i)<=a的i 那么我们将询问按照a从小到大排序 将F(i)从小到大排序 每次询问将<=a的F(i)按照之前的方式暴力插入 用树状数组来维护这个前缀和

这题就搞出来了

时间复杂度O(nlog^2n+q√nlogn) 有点卡。。。取模那里自然溢出int就行了 最后再对2147483647取一下&即可

代码:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm> using namespace std;
const int mod=;
const int maxn=; int n,m,a;
int prime[maxn];
int cnt;
int vis[maxn];
int mu[maxn];
int sum[maxn]; struct node
{
int n,m,a,id;
}q[maxn]; bool cmp2(node x,node y)
{
return x.a<y.a;
} struct Node
{
int g;
int sum;
}f[maxn]; bool cmp1(Node a,Node b)
{
return a.sum<b.sum;
} long long ans[maxn];
long long c[maxn];
int lowbit(int x)
{
return x&-x;
} void add(int x,int d)
{
while(x<maxn)
{
c[x]+=d;
x+=lowbit(x);
}
} long long Sum(int x)
{
long long ans=;
while(x>)
{
ans += c[x];
x -= lowbit(x);
}
return ans;
} void init()
{
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
cnt=;
mu[]=;
for(int i=;i<maxn;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
mu[i]=-;
}
for(int j=;j<cnt&&i*prime[j]<maxn;j++)
{
vis[i*prime[j]]=;
if(i%prime[j])
mu[i*prime[j]]=-mu[i];
else
{
mu[i*prime[j]]=;
break;
}
}
}
sum[]=;
for(int i=;i<maxn;i++)
sum[i]=sum[i-]+mu[i];
for(int i=;i<maxn;i++)
for(int j=i;j<maxn;j+=i)
f[j].sum += i;
for(int i=;i<maxn;i++)
f[i].g=i;
sort(f+,f+maxn,cmp1);
} long long cal(int n,int m)
{
if(n>m)
swap(n,m);
long long res=;
int last=;
for(int i=;i<=n;i=last+)
{
last=min(n/(n/i),m/(m/i));
res += (long long)(n/i)*(m/i)*(Sum(last)-Sum(i-));
}
return res;
} int main()
{
init();
int T;
scanf("%d",&T);
for(int i=;i<=T;i++)
{
scanf("%d%d%d",&q[i].n,&q[i].m,&q[i].a);
q[i].id=i;
}
sort(q+,q++T,cmp2);
memset(c,,sizeof(c));
int j=;
for(int i=;i<=T;i++)
{
while(j<maxn&&f[j].sum<=q[i].a)
{
int g=f[j].g;
for(int k=g;k<maxn;k+=g)
add(k,f[j].sum*mu[k/g]);
j++;
}
ans[q[i].id]=cal(q[i].n,q[i].m);
}
for(int i=;i<=T;i++)
printf("%lld\n",ans[i]%mod);
return ;
}

bzoj 3529 数表的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  2. BZOJ 3529 数表(莫比乌斯+树状数组)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...

  3. bzoj 3529 数表 莫比乌斯反演+树状数组

    题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...

  4. BZOJ 3529 数表(莫比乌斯反演)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3529 思路:令F(i)为i的约数和, 1<=x<=n,1<=y<=m G(i ...

  5. 【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)

    3529: [Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有 ...

  6. bzoj [SDOI2014]数表 莫比乌斯反演 BIT

    bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ...

  7. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  8. bzoj 3529 [Sdoi2014]数表(莫比乌斯反演+BIT)

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...

  9. ●BZOJ 3529 [Sdoi2014]数表

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3529 题解: 莫比乌斯反演. 按题目的意思,令$f(i)$表示i的所有约数的和,就是要求: ...

随机推荐

  1. poj_3468: A Simple Problem with Integers (树状数组区间更新)

    题目是对一个数组,支持两种操作 操作C:对下标从a到b的每个元素,值增加c: 操作Q:对求下标从a到b的元素值之和. 这道题也可以用线段树解,本文不做描述,下面分析如何用树状数组来解决这道题. 先把问 ...

  2. Python面向对象编程(四)

    1.多态 多态的概念虽然现在才说,但是我们一直在用.多态就是多种形态的意思,动物都猫,狗,猪等等,这些都是动物的多种形态. 反映在Python中,多态就意味着就算不知道变量所引用的对象类型是什么,也能 ...

  3. android - 解决“应用自定义权限重名”

    背景 现场的开发今天跟我说,测试包装不上!报错"应用自定义权限重名"!!! 网上百度下关键字,发现魅族手机有这个毛病,顺藤摸瓜:"http://bbs.flyme.cn/ ...

  4. jacoco统计Android手工测试覆盖率并自动上报服务器

    改进了几个点 1. 不用借助Instrumentation启动,正常启动即可: 2. 测试代码不用push到主分支,主分支代码拉到本地后用git apply patch方式合并覆盖率代码: 3. 测试 ...

  5. Quartz.Net 与 Autofac 自动注入 的整合问题

    一.问题发现 今天早上在用 Quartz.Net 做定时扫描异常队列的功能模块时,发现处理异常队列的Job里面的ILog对象服务,Autofac没有自动注入进来. 然后在网上查阅相关资料,无奈发现 Q ...

  6. (转)Spring中ThreadLocal的认识

    我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度.这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突.我们使用模板类访问底层数据,根据持久 ...

  7. java 常见数据结构

    1)tree 2) queue 3) list 4) stack 5) heap 6) map

  8. 支付宝分库分表中间件--zdal简介

    中间件, 如果仅仅作为一名用户的话, 主要关注一下如何使用即可, 大多数情况下也就是配置. 下面简单的介绍一下支付宝的分库分表中间件--->zdal在web项目中的配置. 1, 在网上查阅相关资 ...

  9. 枪战Maf[POI2008]

    题目描述 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. 输入 输入n人 ...

  10. 再起航,我的学习笔记之JavaScript设计模式05(简单工程模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...