传送门

不考虑$a$的影响

设$f(i)$为$i$的约数和

$$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$

$$=\sum\limits_{d=1}^nf(d)\sum\limits_{i=1}^{\lfloor \frac n d \rfloor}\sum\limits_{j=1}^{\lfloor \frac m d \rfloor } [gcd(i,j)==1]$$

这个东西直接反演一下

$$=\sum\limits_{d=1}^nf(d)\sum\limits_{i=1}^{\lfloor \frac n d \rfloor}\mu(i) \lfloor \frac n {di} \rfloor \lfloor \frac m {di} \rfloor$$

然后转为枚举$di$

$$=\sum\limits_{D=1}^{n}\sum\limits_{d|D}f(d)\mu(\frac D d) \lfloor \frac n {D} \rfloor \lfloor \frac m {D} \rfloor$$

对于每一个$i$可以用整除分块把它前缀和的贡献算出来,然后用树状数组动态维护前缀和

然后我们考虑$a$的限制。把所有询问离线按$a$排序,从小到大处理处理询问,每处理到一个询问就把所有的$f(d)<=a$的$d$的贡献都累加起来,直接树状数组查询一下就可以了

然后听大佬们说这题取模直接自然溢出就可以了,然后不知道为啥最后还要$\&$一个$0x7fffffff$

 //minamoto
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ui unsigned int
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[<<],z[];int C=-,Z;
inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
inline void print(int x){
if(C><<)Ot();if(x<)sr[++C]=,x=-x;
while(z[++Z]=x%+,x/=);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=1e5;
int p[N];ui mu[N+],f[N+],c[N+],ans[N+];
int a[N+],m,q,n,vis[N+];
struct node{
int n,m,val,id;
node(){}
node(int n,int m,int val,int id):n(n),m(m),val(val),id(id){}
inline bool operator <(const node &b)const
{return val<b.val;}
}t[N];
inline bool cmp(const int &a,const int &b){return f[a]<f[b];}
inline void add(int x,ui y){
for(;x<=N;x+=x&-x) c[x]+=y;
}
inline ui query(int x){
ui res=;
for(;x;x-=x&-x) res+=c[x];
return res;
}
void init(){
mu[]=;
for(int i=;i<=N;++i){
if(!vis[i]) p[++m]=i,mu[i]=-;
for(int j=;j<=m&&p[j]*i<=N;++j){
vis[i*p[j]]=;
if(i%p[j]==) break;
mu[i*p[j]]=-mu[i];
}
}
for(int i=;i<=N;++i)
for(int j=i;j<=N;j+=i)
f[j]+=i;
for(int i=;i<=N;++i) a[i]=i;
sort(a+,a++N,cmp);
}
int main(){
// freopen("testdata.in","r",stdin);
init();
q=read();
for(int i=,x,y,z;i<=q;++i){
x=read(),y=read(),z=read();
if(x>y) swap(x,y);cmax(z,);
t[i]=node(x,y,z,i);
}
sort(t+,t+q+);
for(int i=,j=,k;i<=q;++i){
for(;f[a[j]]<=t[i].val;++j)
for(k=a[j];k<=N;k+=a[j])
add(k,f[a[j]]*mu[k/a[j]]);
for(int l=,r;l<=t[i].n;l=r+){
r=min(t[i].n/(t[i].n/l),t[i].m/(t[i].m/l));
ans[t[i].id]+=(t[i].n/l)*(t[i].m/l)*(query(r)-query(l-));
}
}
for(int i=;i<=q;++i) print(ans[i]&0x7fffffff);
Ot();
return ;
}

洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)的更多相关文章

  1. BZOJ 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)

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

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

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

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

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

  4. BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)

    题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...

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

    $ans=\sum_{i=1}^n\sum_{j=1}^n\sigma(gcd(i,j))$ 枚举gcd为d的所有数得到 $ans=\sum_{d<=n}\sigma(d)*g(d)$ $g(d ...

  6. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演 树状数组)

    题意 题目链接 Sol 首先不考虑\(a\)的限制 我们要求的是 \[\sum_{i = 1}^n \sum_{j = 1}^m \sigma(gcd(i, j))\] 用常规的套路可以化到这个形式 ...

  7. luogu3312 [SDOI2014]数表 (莫比乌斯反演+树状数组)

    link \(\sum_{i=1}^n\sum_{j=1}^m[s(\gcd(i,j))\le a]s(\gcd(i,j))\) \(=\sum_{p=1}^ns(p)[s(p)\le a]\sum_ ...

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

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

  9. 洛谷 P3312 [SDOI2014]数表 解题报告

    P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...

随机推荐

  1. win7 PLSQL Developer 10/11/12 连接 Oracle 10/11/12 x64位数据库配置详解(与32位一样,只要注意对应Oracle Instant Client版本) tns 错误和 nls错误

    环境win7 x64 PLSQL Developer 10 与 11 Oracle Instant Client 10 与 12 参考http://blog.csdn.net/chen_zw/arti ...

  2. RTSP/RTMP/HLS/HTTP流媒体播放器EasyPlayer

    EasyPlayer播放器系列项目 EasyPlayer是由EasyDarwin开源团队开发和维护的一个流媒体播放器系列项目,随着多年不断的发展和迭代,不断基于成功的实践经验,发展出包括有: Easy ...

  3. ElasticSearch(八)关于document的一些知识点

    先查看一条数据: GET /ecommerce/product/5 { "_index" : "ecommerce", "_type" : ...

  4. Java版TicTacToe

    MainFrame.java package com.bu_ish; import java.awt.BorderLayout; import java.awt.Color; import java. ...

  5. sudo出现unable to resolve host

    是因为/etc/hosts下的主机名和/etc/hostname下的主机名不一致所导致的错误,将两个改为一致即可

  6. Centos查看端口占用情况

    Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令:   lsof -i tcp:80   列出所有端口   netstat -ntlp   结束进程: kill 进程代码

  7. 如何配置DSI时钟频率

    [DESCRIPTION] 计算DSI数据速率的方式,以及如何配置时钟clk的方式 [KEYWORD] dsi.data rate.mipi clk [SOLUTION] 1.DSI vdo mode ...

  8. hihocoder #1122 二分图二•二分图最大匹配之匈牙利算法(*【模板】应用 )

    梳理整个算法: 1. 依次枚举每一个点i: 2. 若点i尚未匹配,则以此点为起点查询一次交错路径. 最后即可得到最大匹配数. 在这个基础上仍然有两个可以优化的地方: 1.对于点的枚举:当我们枚举了所有 ...

  9. HTML CSS 属性大全

    CSS 属性大全 文字属性 「字体族科」(font-family),设定时,需考虑浏览器中有无该字体. 「字体大小」(font-size),注意度量单位.<绝对大小>|<相对大小&g ...

  10. centos6.5安装jdk

    1.查看Linux环境自带JDK 使用命令:# rpm -qa|grep gcj 显示内容其中包含相应信息# java-x.x.x-gcj-compat-x.x.x.x-xxjpp# java-x.x ...