一个数表上第i行第j列表示能同时整除i和j的自然数,Q<=2e4个询问,每次问表上1<=x<=n,1<=y<=m区域内所有<=a的数之和。n,m<=1e5,a<=1e9。对2^31取模。

这个a很讨厌就先不理他。首先i行j列的那个数其实是$a_{ij}=\sum_{x|gcd(i,j)} x$,令$s(t)=\sum_{x|t}x$,然后gcd(i,j)是只有1e5的,可以先把s数组预处理出来。s是积性函数所以线性筛可以搞,但复杂度不在这里,直接埃筛也行。

那现在就是看[1,min(n,m)]中每个数作为gcd的s(t)被算了多少次,也就是1<=x<=n,1<=y<=m中有多少(x,y)=t,记这次数叫f(t),那f(t)是经典的可以反演的式子,反演就不写了,最后$f(t)=\sum_{t|d}\mu(\frac{d}{t})\frac{n}{d}\frac{m}{d}$,最后要求的就是$\sum_{t=1}^{min(n,m)}s(t)\sum_{t|d}\mu(\frac{d}{t})\frac{n}{d}\frac{m}{d}$。

然后我就卡住了。这里用个套路二把后面那俩提出来,变成:$\sum_{d=1}^{min(n,m)}\frac{n}{d}\frac{m}{d}\sum_{t|d}s(t)\mu(\frac{d}{t})$,漂亮,后面那东西(记h(d))预处理一下即可,然后就\sqrt n出解。

然而有了a的限制之后,后面那东西就变得飘忽不定了,这时候需要离线,然后所有s(t)排个序,每次询问前把<=当前a的所有s(t)加给对应的h(d),然后查区间和用树状数组即可。这样就可以在$nlog^2 n+q\sqrt n logn$出解了。

然而排序时忘了cmp函数了。 然而过程中忘了取模导致爆longlong了。 然而没考虑到有负数。 然而树状数组忘开longlong了。

然而最后跑得贼慢,其实对2^31取模只需要int自然溢出最后&2147483647即可。

 //#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
//#include<bitset>
#include<algorithm>
//#include<cmath>
using namespace std; int T,n,m,A;
#define maxn 100011
int miu[maxn],s[maxn],prime[maxn],lp,us[maxn]; bool notprime[maxn];
int snum[maxn];
bool cmp(const int &a,const int &b) {return s[a]<s[b];}
void pre(int n)
{
for (int i=;i<=n;i++)
for (int j=i;j<=n;j+=i)
s[j]+=i;
for (int i=;i<=n;i++) snum[i]=i;
sort(snum+,snum++n,cmp);
miu[]=; lp=;
for (int i=;i<=n;i++)
{
if (!notprime[i]) {prime[++lp]=i; miu[i]=-;}
for (int j=;j<=lp && 1ll*prime[j]*i<=n;j++)
{
notprime[i*prime[j]]=;
if (i%prime[j]) miu[i*prime[j]]=-miu[i];
else {miu[i*prime[j]]=; break;}
}
}
for (int i=;i<=n;i++)
for (int j=i,cnt=;j<=n;j+=i,cnt++)
us[j]+=miu[cnt]*s[i];
} #define LL long long
struct BIT
{
LL a[maxn],n;
BIT() {n=;}
void add(int x,int v) {for (;x<=n;x+=x&-x) a[x]+=v;}
LL query(int x) {LL ans=; for (;x;x-=x&-x) ans+=a[x]; return ans;}
}t; struct Q
{
int n,m,a,id;
bool operator < (const Q &b) const {return a<b.a;}
}q[maxn];
LL ans[maxn]; const int base=;
int main()
{
pre(base);
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); int j=;
const LL tmp=1ll<<;
for (int c=;c<=T;c++)
{
while (j<=base && s[snum[j]]<=q[c].a)
{
for (int k=snum[j],cnt=;k<=base;k+=snum[j],cnt++)
t.add(k,s[snum[j]]*miu[cnt]);
j++;
}
LL Ans=;
for (int i=,to=min(q[c].n,q[c].m),last;i<=to;i=last+)
{
last=min(q[c].n/(q[c].n/i),q[c].m/(q[c].m/i));
Ans+=1ll*(q[c].n/i)*(q[c].m/i)*(t.query(last)-t.query(i-))%tmp,
Ans-=Ans>=tmp?tmp:,Ans+=Ans<?tmp:;
}
ans[q[c].id]=Ans;
} for (int c=;c<=T;c++) printf("%lld\n",ans[c]);
return ;
}

莫比乌斯反演套路二--(n/d)(m/d)给提出来--BZOJ3529: [Sdoi2014]数表的更多相关文章

  1. bzoj3529: [Sdoi2014]数表 莫比乌斯反演

    题意:求\(\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))(gcd(i,j)<=a),f(x)是x的因子和函数\) 先考虑没有限制的情况,考虑枚举gcd为x,那么有\(\ ...

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

    3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2151 Solved: 1080 [Submit][Status ...

  3. 莫比乌斯反演套路三、四--BZOJ2154: Crash的数字表格 && BZOJ2693: jzptab

    t<=1e4个询问每次问n,m<=1e7,$\sum_{1\leqslant x \leqslant n,1 \leqslant y\leqslant m}lcm(x,y)$. 首先题目要 ...

  4. 莫比乌斯反演套路一--令t=pd--BZOJ2820: YY的GCD

    t<=10000组询问:有多少x,y,满足$x\epsilon [1,n],y\epsilon [1,m],(x,y)为质数$.n,m<=1e7. 首先式子列出来,f(i)--1<= ...

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

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

  6. BZOJ3529 [Sdoi2014]数表【莫比乌斯反演】

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

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

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

  8. BZOJ3529: [Sdoi2014]数表 莫比乌斯反演_树状数组

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define ll long lo ...

  9. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演,离线)

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

随机推荐

  1. [POJ1509]Glass Beads 后缀自动机 最小循环串

    题目链接:http://poj.org/problem?id=1509 题目意思就是求循环字符串的最小表示. 我们用字符串S+S建立SAM,然后从root开始走n步,每次尽量选最小的. 由于 SAM ...

  2. Spring---AOP注解开发&jdbc模板&Spring事务管理

    一.AOP注解开发 此处需要回忆一遍AOP的概念.简单的来说,AOP就是利用动态代理技术,做到不触动源代码但却扩展了功能.那么就需要一个被扩展的对象和一个“新的功能”,例如说给某类的saveUser方 ...

  3. LoadRunner脚本回放与设置

    一.runtime setting 1.迭代次数设置与迭代步长(循环间隔时间) 2.日志打印设置       二.实时观看回放 1.动态回放与静态回放(静态回放时,不会有逐行高亮显示:动态回放时高亮显 ...

  4. Android学习笔记(十五) Http

    1.Http协议概要 应用程序和服务间的请求/响应是无状态的,即响应完即断开连接. HttpClient库是Android自带的,故无需引入该库 2.Http请求和获取数据 生成代表客户端的HttpC ...

  5. APP崩溃处理

    以前经常遇到APP内部异常情况下的Exception,最初是通过try catch这样的方式处理:但是APP上线后,用户在特地的情况下触发 了某些Exception,当然这些Exception从理论和 ...

  6. oracle 创建表

    --创建表 create table browser_track( btId number not null , opend_id ) not null, url_address ) not null ...

  7. IIS ARR设置HTTP跳转到HTTPS

    GUI Version - Select the website you wish to configure- In the “Features View” panel, double click U ...

  8. [Android]AndroidDesign中ActionBar探究2 嵌入Fragment

    上一节我们只是简单了介绍了Android Design风格中的ActionBar的简单实用,如添加MenuItem,这节我们会进一步了解ActionBar的其他功能. 在Android Develop ...

  9. vba根据部门分别汇总不同部门下的人员不同培训内容的时长总计,多条件求和

    Option Explicit Sub yy() Dim d, arr, s$, i&, m&, w$ Set d = CreateObject("Scripting.Dic ...

  10. 迅为7寸工业平板电脑|人机界面|工业触摸屏|工控机|HMI|工业显示器

    型号:iTOP-HMI070-C 7寸工业平板电脑特点: 1.iTOP-HMI070-C(CAN) 7寸工业触摸屏,CAN总线型触摸屏,配有2组独立的串口和一路CAN总线口: 2.串口都支持各种PLC ...