传送门

我们看要求的东西$$\sum_{i=1}{n}\sum_{j=1}{m}[\sigma(gcd(i,j))\le a]\sigma(gcd(i,j))$$

然而\(\le a\)比较烦,可以先去掉这个限制

没有这个限制,我们显然可以枚举每个k,求出gcd为k的数字对数,然后乘上\(\sigma(k)\)再加起来

把这个柿子写出来$$\sum_{k=1}{min(n,m)}\sigma(k)\sum_{i=1}{n}\sum_{j=1}^{m}[gcd(i,j)=k]$$

根据套路,可以得到$$\sum_{i=1}{n}\sum_{j=1}{m}[gcd(i,j)=k]=\sum_{k|d}\mu(\frac{d}{k})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor$$

所以原式等于$$\sum_{k=1}{min(n,m)}\sigma(k)\sum_{k|d}\mu(\frac{d}{k})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor$$$$\sum_{d=1}{min(n,m)}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\sum_{k|d}\sigma(k)\mu(\frac{d}{k})$$

后面那个东西可以枚举倍数,然后求出前缀和,然后直接数论分块救星了

现在加上\(a\)的限制,那么只有\(\le a\)的\(\sigma(k)\)能造成贡献,所以把询问离线,然后按\(a\)排序,依次把满足条件的\(\sigma(k)\)加进前缀和,因为要动态维护前缀和,树状数组即可

#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
#define re register using namespace std;
const int N=1e5+10;
il int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int q,a[N],an[N];
LL prm[N],mu[N],pp[N],xgm[N],tt,ans;
il bool cmp(int a,int b){return xgm[a]<xgm[b];}
int c[N];
il int md(int x){return x&2147483647;}
il void ad(int x,int y){while(x<=N-10) c[x]+=y,x+=x&(-x);}
il int gsm(int x){int an=0;while(x) an+=c[x],x-=x&(-x);return an;}
struct node
{
int n,m,a,i;
bool operator < (const node &bb) const {return a<bb.a;}
}qq[N]; int main()
{
mu[1]=1;
for(int i=2;i<=N-10;++i)
{
if(!pp[i]) pp[i]=1,mu[i]=-1,prm[++tt]=i;
for(int j=1;j<=tt&&i*prm[j]<=N-10;++j)
{
pp[i*prm[j]]=1,mu[i*prm[j]]=-mu[i];
if(i%prm[j]==0) {mu[i*prm[j]]=0;break;}
}
}
for(int i=1;i<=N-10;++i)
for(int j=i;j<=N-10;j+=i)
xgm[j]+=i;
for(int i=1;i<=N-10;++i) a[i]=i;
sort(a+1,a+N-10+1,cmp);
q=rd();
for(int i=1;i<=q;++i)
{
qq[i].n=rd(),qq[i].m=rd(),qq[i].a=rd(),qq[i].i=i;
if(qq[i].n>qq[i].m) swap(qq[i].n,qq[i].m);
}
sort(qq+1,qq+q+1);
for(int i=1,j=1;i<=q;++i)
{
while(j<=N-10&&xgm[a[j]]<=qq[i].a)
{
int x=a[j];
for(int k=1;x*k<=N-10;++k) ad(x*k,xgm[x]*mu[k]);
++j;
}
int n=qq[i].n,m=qq[i].m,ii=qq[i].i;
for(int k=1,l;k<=n;k=l+1)
{
l=min(n/(n/k),m/(m/k));
an[ii]=an[ii]+(gsm(l)-gsm(k-1))*(n/k)*(m/k);
}
}
for(int i=1;i<=q;++i) printf("%d\n",md(an[i]));
return 0;
}

luogu P3312 [SDOI2014]数表的更多相关文章

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

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

  2. 洛谷P3312 - [SDOI2014]数表

    Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...

  3. P3312 [SDOI2014]数表

    啊啊啊我昨天怎么没写题解wwww 补昨日题解... 题目链接 : https://www.luogu.org/problemnew/show/P3312 也是莫反 我要把fft留到今天写 [和zyn小 ...

  4. [bzoj3529] [洛谷P3312] [Sdoi2014] 数表

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

  5. Luogu 3312 [SDOI2014]数表

    在这一篇里把所有的套路写全方便自己之后复习. 首先是一个小学生数学:$a$整除$b$ $ = $  $\frac{b}{a}$ 也就是说这题中格子$(i, j)$的值就是既能被$i$整除又能被$j$整 ...

  6. 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)

    传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...

  7. 洛谷 P3312 [SDOI2014]数表

    式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{ ...

  8. 并不对劲的bzoj3529:loj2193:p3312:[SDOI2014]数表

    题目大意 定义函数\(f(x)=\sum_{k|x}k\) \(t\)(\(t\leq2*10^4\))组询问,每组给定\(n,m,a\)(\(n,m\leq10^5,a\leq10^9\)),求: ...

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

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

随机推荐

  1. P1637 三元上升子序列

    thair 好,这个naive的东西因为只有三元,很好求解.只要把每个数之前小的L[i]与之后大的R[i]求一下即可. 求两次逆序对即可.那么答案便是∑(L[i]*R[i]); 对于更高元的,胡雨菲写 ...

  2. 【BZOJ3289】Mato的文件管理 莫队+树状数组

    题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...

  3. tensorflow不同版本安装与升级/降级

    https://blog.csdn.net/junmuzi/article/details/78357371 首先,可以安装一个anaconda. 然后使用python的pip可以安装特定版本的ten ...

  4. GWAS研究可利用的数据库(持续更新)

    1.列表包括数据库名称.表型.是否能下载到基因型(genotype).是否能下载到GWAS结果文件(P值.效应值.SNP位点).目前收集到的有如下: 参考到这些数据库的文献:Genome-wide a ...

  5. mfc01

    1.解决不能将参数1从“const char []”转换为“LPCTSTR” ,使用多字节字符集.

  6. Xml二(解析思想)、

    XML解析: * 解析xml可以做: * 如果xml作为配置文件:读取 * 如果xml作为传输文件:写,读 * xml解析思想: * DOM:将文档加载进内存,形成一颗dom树(document对象) ...

  7. 关于ComponentName组件名称的使用

    ComponentName,顾名思义,就是组件名称,通过调用Intent中的setComponent方法,我们可以打开另外一个应用中的Activity或者服务. 实例化一个ComponentName需 ...

  8. 安卓和java开发环境的安装

    java配置安卓需要,sdk,jdk(java),adt,eclipse 对于jdk的配置和安装: 1 卸载原来的jdk,重新配置环境变量只需要:在系统变量中把新的jdkJ安装路径写到“JAVA_HO ...

  9. MySQL会发生死锁吗?

    SHOW ENGINE INNODB STATUS;来查看死锁日志: SHOW PROCESSLIST;查看进程 MySQL的InnoDB引擎事务有4种隔离级别,主要是为了保证数据的一致性. Inno ...

  10. day06-(mysql)

    建表: CREATE DATABASE mysqltest2; USE mysqltest2; -- 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, -- ...