假设$n\leq m$,我们先不考虑$\leq a$的限制

$\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sigma((i,j))=\sum\limits_{T=1}^n\left\lfloor\frac nT\right\rfloor\left\lfloor\frac mT\right\rfloor\sum\limits_{d|T}\sigma(d)\mu\left(\frac Td\right)$

我们可以线性筛出$g(n)=\sum\limits_{d|n}\mu(d)\mu\left(\frac nd\right)$并$O(\sqrt n)$回答询问

现在加上了$\leq a$的限制,其实就是只计算$\sigma(d)\leq a$的$d$

考虑离线,把所有询问按$a$排序,按$\sigma(d)$从小到大更新$g$(更新$d$的倍数处的$g$)就可以做了

用树状数组维护$g$,时间复杂度$O\left(n\log_2^2n+q\sqrt n\log_2n\right)$

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int T=100000;
int pr[T+10],mu[T+10],d[T+10],sd[T+10];
bool np[T+10];
void sieve(){
	int i,j,M;
	M=0;
	mu[1]=1;
	d[1]=1;
	sd[1]=1;
	for(i=2;i<=T;i++){
		if(!np[i]){
			pr[++M]=i;
			mu[i]=-1;
			d[i]=i;
			sd[i]=i+1;
		}
		for(j=1;j<=M&&i*pr[j]<=T;j++){
			np[i*pr[j]]=1;
			if(i%pr[j]==0){
				d[i*pr[j]]=d[i]*pr[j];
				sd[i*pr[j]]=sd[i/d[i]]*(sd[d[i]]*pr[j]+1);
				break;
			}
			mu[i*pr[j]]=-mu[i];
			d[i*pr[j]]=pr[j];
			sd[i*pr[j]]=sd[i]*sd[pr[j]];
		}
	}
}
int s[100010];
int lowbit(int x){return x&-x;}
void add(int x,int d){
	while(x<=T){
		s[x]+=d;
		x+=lowbit(x);
	}
}
int query(int x){
	int r=0;
	while(x){
		r+=s[x];
		x-=lowbit(x);
	}
	return r;
}
struct ask{
	int n,m,a,i;
}q[100010];
bool operator<(ask a,ask b){return a.a<b.a;}
int p[100010],ans[100010];
bool cmp(int a,int b){return sd[a]<sd[b];}
#define qn q[i].n
#define qm q[i].m
int main(){
	sieve();
	int m,M,i,j,nex,s;
	scanf("%d",&m);
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&qn,&qm,&q[i].a);
		if(qn>qm)swap(qn,qm);
		q[i].i=i;
	}
	sort(q+1,q+m+1);
	for(i=1;i<=T;i++)p[i]=i;
	sort(p+1,p+T+1,cmp);
	M=1;
	for(i=1;i<=m;i++){
		while(M<=T&&sd[p[M]]<=q[i].a){
			for(j=p[M];j<=T;j+=p[M]){
				if(mu[j/p[M]])add(j,sd[p[M]]*mu[j/p[M]]);
			}
			M++;
		}
		s=0;
		for(j=1;j<=qn;j=nex+1){
			nex=min(qn/(qn/j),qm/(qm/j));
			s+=(qn/j)*(qm/j)*(query(nex)-query(j-1));
		}
		ans[q[i].i]=s;
	}
	for(i=1;i<=m;i++)printf("%d\n",ans[i]&2147483647);
}

[BZOJ3529]数表的更多相关文章

  1. 【BZOJ3529】数表(莫比乌斯反演,树状数组)

    [BZOJ3529]数表(莫比乌斯反演,树状数组) 题解 首先不管\(A\)的范围的限制 要求的东西是 \[\sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j))\] 其中\ ...

  2. 【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组

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

  3. [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演

    数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...

  4. 【BZOJ3529】【莫比乌斯反演 + 树状数组】[Sdoi2014]数表

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

  5. 【BZOJ3529】【SDOI2014】 数表

    Time Limit: 10 Sec Memory Limit: 512 MB Description ​ 有一张\(n×m\)的数表,其第i行第j列(\(,1 \le i \leq n,1 \le ...

  6. 【BZOJ3529】【SDOI2014】数表

    Time Limit: 1000 ms Memory Limit: 512 MB Description 有一张n×m的数表,其第i行第j列 (1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自 ...

  7. 【BZOJ3529】数表

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

  8. bzoj千题计划205:bzoj3529: [Sdoi2014]数表

    http://www.lydsy.com/JudgeOnline/problem.php?id=3529 有一张n*m的数表,其第i行第j列(1 < =i < =n,1 < =j & ...

  9. 【SDOI2014】【BZOJ3529】数表

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

随机推荐

  1. bzoj 1197 DP

    我们可以将这个问题转化为在n维空间中一共放m个n维球,求这m个球最多将这个空间分为不同的几个部分. 那么我们设w[i][j]代表i为空间放j个球分为的部分,那么w[i][j]=w[i][j-1]+w[ ...

  2. aspnet_regiis.exe -i 执行报错

    IIS刚部署时出现问题 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 按照网上的步骤,使用管理员打开CMD 开始->所有程 ...

  3. metlnfo 5.3.1 sql注入复现

    首先还是要说的是metlnfo是伪全局变量机制 所以如下: /admin/include/global.func.php function save_met_cookie(){ global $met ...

  4. js 验证ip列表

    如题. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...

  5. Jmeter获取当前时间、历史时间、未来时间的方式

    __time : 获取时间戳.格式化时间 操作步骤: 1.通过函数助手,生成一个_time 函数: 2.如果参数为时间戳,那公式为: ${__time(,)}  :  默认该公式精确到毫秒级别, 13 ...

  6. 【bzoj4530】大融合(LCT的子树维护)

    LCT维护子树并没有想象中的那么难,在这里只是复习下. (其他的维护子树的题目,可见:“共价大爷游长沙”) 只要记录下虚边连接的信息就好了. #include<bits/stdc++.h> ...

  7. bzoj 1015 星球大战starwar

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题解: 如果按照题目的意思,每次删点.删边太困难了……于是采用逆向思维,构造出最后的 ...

  8. webapi-1 给现有MVC 项目添加 WebAPI

    1. 增加一个WebApi Controller, VS 会自动添加相关的引用,主要有System.Web.Http,System.Web.Http.WebHost,System.Net.Http 2 ...

  9. 步骤一:下载jdk并安装和配置java环境变量

    1.下载JDk地址: http://download.eclipse.org/oomph/jre/?vm=1_1_7_0_64_0 2.进入下载页面(下载的是jdk7),点击:Oracle JDK1. ...

  10. 小程序的一个tab切换

    <view class="tab-left" bindtap="tab"> <view class="{{tabArr.curHdI ...