μhttp://www.lydsy.com/JudgeOnline/problem.php?id=3529 (题目链接)

题意

  多组询问,每次给出${n,m,a}$。求$${\sum_{i=1}^n\sum_{j=1}^m[\sum_{d|i,d|j}d<=a]\sum_{d|i,d|j}d}$$

Solution

  PoPoQQQ的看不懂,我还是比较适合套路→_→:http://blog.csdn.net/FZHvampire/article/details/50964639

  有${a}$的限制很不好做,我们不妨先来看看如果没有${a}$的限制,是个什么情况。

\begin{aligned}  & \sum_{i=1}^n\sum_{j=1}^m\sum_{d|i,d|j}d  \\  =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d=1}^{min(n,m)}f(d)[gcd(i,j)=d]   \end{aligned}

  这里${f(d)}$表示${d}$的约数和,由约数和定理:$${d=p_1^{a_1}p_2^{a_2}p_3^{a_3}······p_k^{a_k}}$$

$${f(d)=(p_1^0+p_1^1+······+p_1^{a_1})(p_2^0+p_2^1+······+p_2^{a_2})······(p_k^0+p_k^1+······+p_k^{a_k})}$$

  我们发现当${p,q}$互质时,${f(pq)=f(p)f(q)}$,${f}$是个积性函数。也就是说${f}$可以线性筛求解,具体求法可以看代码。回到上面的问题,我们继续变化这个式子。

\begin{aligned}  &\sum_{i=1}^n\sum_{j=1}^m\sum_{d=1}^{min(n,m)}f(d)[gcd(i,j)=d]  \\  =&\sum_{d=1}^{min(n,m)}f(d)\sum_{i=1}^{\lfloor{n/d}\rfloor}\sum_{j=1}^{\lfloor{m/d}\rfloor}[gcd(i,j)=1]  \\  =&\sum_{d=1}^{min(n,m)}f(d)\sum_{t=1}^{min(\lfloor{n/d}\rfloor,\lfloor{m/d}\rfloor)}μ(t)\lfloor\frac{n}{dt}\rfloor\lfloor\frac{m}{dt}\rfloor   \end{aligned}

  我们令${Q=dt}$,先枚举${Q}$,得到:$${\sum_{Q=1}^{min(n,m)}\lfloor\frac{n}{Q}\rfloor\lfloor\frac{m}{Q}\rfloor\sum_{d|Q}f(d)μ(\frac{Q}{d})}$$

  我们对${f}$和${μ}$函数的狄利克雷卷积${g(Q)=\sum_{d|Q}f(d)μ(\frac{Q}{d})}$预处理前缀和,前面的${\lfloor\frac{n}{Q}\rfloor\lfloor\frac{m}{Q}\rfloor}$分块,那么这个式子的计算就达到了${\sqrt{n}}$。

  考虑如何加入限制${a}$。

  我们可以离线,将询问按照${a}$从小到大排序,${f}$函数按照从小到大排序。询问的时候,我们就动态维护一个树状数组${c}$。树状数组的每一位${c[x]}$存的是卷积${g(x)}$中${f(d)}$不超过${a}$的数之和。数据组数为${T}$,询问复杂度${O(T\sqrt{n}logn)}$

细节

  这题复杂度有点卡,对于取模运算我们可以对${int}$自然溢,最后再${\&2147483647}$就可以了。

代码

// bzoj3994
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#define LL long long
#define inf 2147483647
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
int mu[maxn],e[maxn],ans[maxn],c[maxn],vis[maxn],p[maxn],t[maxn],g[maxn]; struct F {int d,num;}f[maxn];
struct Q {int n,m,a,id;}q[maxn]; bool cmpT(Q a,Q b) {return a.a<b.a;}
bool cmpt(F a,F b) {return a.d<b.d;}
int lowbit(int x) {return x&-x;}
int power(int a,int b) {
int res=1;
while (b) {
if (b&1) res*=a;
a*=a,b>>=1;
}
return res;
}
void add(int x,int val) {
for (int i=x;i<maxn;i+=lowbit(i)) c[i]+=val;
}
int query(int x) {
int s=0;
for (int i=x;i>=1;i-=lowbit(i)) s+=c[i];
return s;
}
int main() {
mu[1]=1;f[1].d=f[1].num=1;
for (int i=2;i<maxn;i++) {
f[i].num=i;
if (!vis[i]) mu[i]=-1,f[i].d=t[i]=1+i,g[i]=1,p[++p[0]]=i;
for (int j=1;j<=p[0] && i*p[j]<maxn;j++) {
vis[i*p[j]]=1;
if (i%p[j]==0) {
mu[i*p[j]]=0;
g[i*p[j]]=g[i]+1;
t[i*p[j]]=t[i]+power(p[j],g[i]+1);
f[i*p[j]].d=f[i].d/t[i]*t[i*p[j]];
break;
}
else {
mu[i*p[j]]=-mu[i];
f[i*p[j]].d=f[i].d*f[p[j]].d;
g[i*p[j]]=1;t[i*p[j]]=p[j]+1;
}
}
}
int T;scanf("%d",&T);
for (int i=1;i<=T;i++) scanf("%d%d%d",&q[i].n,&q[i].m,&q[i].a),q[i].id=i;
sort(q+1,q+1+T,cmpT);
sort(f+1,f+maxn,cmpt);
for (int now=0,i=1;i<=T;i++) {
while (now+1<maxn && f[now+1].d<=q[i].a) { //now忘记+1还过了数据,这是有多水→_→
now++;
for (int j=1;j*f[now].num<maxn;j++)
add(j*f[now].num,mu[j]*f[now].d);
}
int n=q[i].n,m=q[i].m;
if (n>m) swap(n,m);
for (int j=1,k;j<=n;j=k+1) {
k=min(n/(n/j),m/(m/j));
ans[q[i].id]+=(n/j)*(m/j)*(query(k)-query(j-1));
}
ans[q[i].id]&=inf;
}
for (int i=1;i<=T;i++) printf("%d\n",ans[i]);
return 0;
}

【bzoj3529】 Sdoi2014—数表的更多相关文章

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

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

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

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

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

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

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

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

  5. 莫比乌斯反演套路二--(n/d)(m/d)给提出来--BZOJ3529: [Sdoi2014]数表

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

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

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

  7. BZOJ3529: [Sdoi2014]数表

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3529 挺恶心的数论TAT... 设f[i]是i的约数和,这个可以nln(n)扫出来. ans= ...

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

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

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

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

  10. 题解【bzoj3529 [SDOI2014]数表】

    Description \(T\) 组询问,定义 \(F(n)=\sum\limits_{d|n}d\).每次给出 \(n,m,a\) 求 \[\sum\limits_{i=1,j=1,F(\gcd( ...

随机推荐

  1. 大数据入门第二十三天——SparkSQL(一)入门与使用

    一.概述 1.什么是sparkSQL 根据官网的解释: Spark SQL is a Spark module for structured data processing. 也就是说,sparkSQ ...

  2. Tarjan&&缩点简析

    由于昨天写计蒜客初赛的一道题,看出了是缩点,但一时忘记了另外一个叫什么s...的算法怎么写了,话说我为什么没有回去翻一下自己的blog然后今天就去学了更实用也更强力的Tarjan Tarjan的思想其 ...

  3. Arcgis安装要素

    1. ArcGIS安装过程中需将用户名改为计算机名,该计算机名称时需要新建对话框. 2. ArcGIS Server安装过程中要设置ArcGISWebServices用户的读写权限,即设置ASP.NE ...

  4. [C#]使用Label标签控件模拟窗体标题的移动及窗体颜色不断变换

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...

  5. Activity猫的一生-故事解说Activity生命周期

    大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图.翻译API,比较笼统含糊不清. 我就用故事来说一说: 有个人叫User,TA养了几只猫,有只猫叫Activity ...

  6. Js_特效

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  7. Windows Defender还原误删文件

    Win 10 新版本的Windows Defender隔离/删除的文件没有还原的选项,导致被误删的文件无法在威胁记录中恢复.经过尝试发现可以通过修改注册表添加 “还原” 选项 打开注册表,找到 HKE ...

  8. Alpha阶段_团队分数分配

    小组成员 分数分配 薄霖 74 徐越 65 赵庶宏 65 赵铭 41 武鑫 39 卞忠昊 36 叶能端 30

  9. alpha阶段的 postmortem 报告

    1. 每个成员到了第二次alpha 阶段与第一次相比,取得什么进步? 成员    黄杰 学会了app环境的搭建和代码的基本理解 李炫宗 更加明白安卓代码的编写和理解 康取 对安卓界面的设计有一些了解 ...

  10. 通俗易懂的word2Vec负采样理解

    理解:http://www.shuang0420.com/2017/03/21/NLP%20%E7%AC%94%E8%AE%B0%20-%20%E5%86%8D%E8%B0%88%E8%AF%8D%E ...