传送门
思路:
复习一下莫比乌斯反演
好像是数论入门题,然后我做了近一天……
式子是这么化没错
n≤mn≤m

∑i=1n∑j=1m[σ(gcd(i,j))≤a]σ(gcd(i,j))

\sum^n_{i=1}\sum^m_{j=1}[\sigma(gcd(i,j))≤a]\sigma(gcd(i,j))

=∑i=1n∑j=1m∑d=1n[gcd(i,j)=d][σ(d)≤a]σ(d)

=\sum^n_{i=1}\sum^m_{j=1}\sum^n_{d=1}[gcd(i,j)=d][\sigma(d)≤a]\sigma(d)
i=di,j=dji=di,j=dj

=∑d=1n[σ(d)≤a]σ(d)∑i=1⌊nd⌋∑j=1⌊md⌋[gcd(i,j)=1]

=\sum^n_{d=1}[\sigma(d)≤a]\sigma(d)\sum^{\lfloor \frac n d\rfloor}_{i=1}\sum^{\lfloor\frac m d\rfloor}_{j=1}[gcd(i,j)=1]

=∑d=1n[σ(d)≤a]σ(d)∑k=1⌊nd⌋μ(k)⌊nkd⌋⌊mkd⌋

=\sum^{n}_{d=1}[\sigma(d)≤a]\sigma(d)\sum^{\lfloor \frac n d\rfloor}_{k=1}\mu(k)\lfloor \frac n {kd}\rfloor\lfloor \frac m {kd}\rfloor
一开始我化到这里就停下开始求解了
写了一发离线+BIT交上去发现比暴力多跑了一个点(?)
分析了一下复杂度好像是 O(Tn)O(Tn)
被reflash婊了一通
悲伤过后重新来搞,在reflash的提(jiao)示(yu)下化成了下面这样
P=kdP=kd

=∑d=1n[σ(d)≤a]σ(d)∑P=1n[d|P]μ(Pd)⌊nP⌋⌊mP⌋

=\sum^n_{d=1}[\sigma(d)≤a]\sigma(d)\sum^n_{P=1}[d|P]\mu(\frac P d)\lfloor \frac n P\rfloor\lfloor \frac m P\rfloor

=∑P=1n⌊nP⌋⌊mP⌋∑d=1P[d|P][σ(d)≤a]σ(d)μ(Pd)

=\sum^n_{P=1}\lfloor \frac n P\rfloor\lfloor \frac m P\rfloor\sum^P_{d=1}[d|P][\sigma(d)≤a]\sigma(d)\mu(\frac P d)
设 F(n)=∑ni=1[i|n][σ(i)≤a]σ(i)μ(ni)F(n)=\sum^n_{i=1}[i|n][\sigma(i)≤a]\sigma(i)\mu(\frac n i)

=∑P=1n⌊nP⌋⌊mP⌋F(P)

=\sum^n_{P=1}\lfloor \frac n P\rfloor\lfloor \frac m P\rfloor F(P)
用BIT维护 FF的前缀和,然后处理每个询问的时候O(n√)O(\sqrt n)前缀和搞就可以了
一开始把所有的 σ(i)μ(ni)\sigma(i)\mu(\frac n i)保存下来,大约有 10610^6个,按照 σ(i)\sigma(i)排序
在BZ上跑了10s……rank倒数第5
又被reflash婊了一通
悲伤过后重新来搞,在reflash的提(jiao)示(yu)下开始现求 μ\mu里的东西(就是枚举d的倍数……)
然后跑了7s……
其实还可以线筛 σ\sigma,因为这是个积性函数(要记录最小质因子的若干次方)
改完以后终于跑到了4s左右……
不过还是很慢
复杂度 O(nlog2n+Tn√logn)O(n\log^2n+T\sqrt n\log n)
写一下这篇博客,记住自己菜到家的数论知识,顺便%%%reflash

#include<cstdio>
#include<iostream>
#include<algorithm>
#define LL long long
#define mo 2147483647
#define N 100000
using namespace std;
int cnt,prime[N+5],mu[N+5],t[N+5];
LL d[N+5],ans[N+5];
typedef pair<int,int>xy;
xy sigma[N+5];
bool vis[N+5];
struct node{int id,n,m,A;bool operator <(const node other)const{return A<other.A;}
}q[20005];
void add(int x,int val)
{for (;x<=N;x+=x&-x) d[x]+=val;
}
LL get(int x)
{LL t=0;for (;x;x-=x&-x) t+=d[x];return t;
}
main()
{mu[1]=1;sigma[1]=make_pair(1,1);t[1]=1;for (int i=2;i<=N;++i){if (!vis[i])prime[++prime[0]]=i,t[i]=i,sigma[i]=make_pair(i+1,i),mu[i]=-1;for (int j=1;j<=prime[0];++j){if (prime[j]*i>N) break;vis[prime[j]*i]=1;if (i%prime[j])t[i*prime[j]]=prime[j],sigma[i*prime[j]]=make_pair(sigma[prime[j]].first*sigma[i].first,i*prime[j]),mu[i*prime[j]]=-mu[i];else{t[i*prime[j]]=t[i]*prime[j];sigma[i*prime[j]]=make_pair(sigma[i].first+sigma[i/t[i]].first*t[i]*prime[j],i*prime[j]);mu[i*prime[j]]=0;break;}}}sort(sigma+1,sigma+N+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);if (q[i].n>q[i].m) swap(q[i].n,q[i].m);q[i].id=i;}sort(q+1,q+T+1);int n,m,last=1;for (int i=1;i<=T;++i){n=q[i].n;m=q[i].m;for (;last<=N;++last)if (sigma[last].first<=q[i].A){int fi=sigma[last].first,se=sigma[last].second;for (int j=1;se*j<=N;++j)add(j*se,fi*mu[j]);}elsebreak;for (int last,j=1;j<=n;j=last+1)last=min(n/(n/j),m/(m/j)),ans[q[i].id]+=1LL*(n/j)*(m/j)*(get(last)-get(j-1));}for (int i=1;i<=T;++i) printf("%d\n",ans[i]&mo);
}

【BZOJ3529】数表,莫比乌斯反演+BIT相关推荐

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

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

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

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

  3. (每日一题)P3312 [SDOI2014]数表(经典莫比乌斯反演 + 树状数组维护离线询问)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.11 莫反 P3312 [SDOI2 ...

  4. 初涉莫比乌斯反演(附带例题)

    什么是莫比乌斯反演 关于莫比乌斯反演 莫比乌斯反演,又称懵逼钨丝繁衍,是一种看了就一脸懵逼的东西. 好吧好吧,严肃点.(不过因为本蒟蒻真的很懵逼,所以错误之处请大神指出) 莫比乌斯反演就是下面这个式子 ...

  5. 莫比乌斯反演--懵逼反演系列

    反演的定义 设有数论函数f(n),g(n)f(n),g(n)f(n),g(n),其中g(n)g(n)g(n)已知 且f(n),g(n)f(n),g(n)f(n),g(n)满足关系g(n)=∑i=0na ...

  6. 莫比乌斯函数+莫比乌斯反演

    几个经典的莫比乌斯反演练习题 先来一个莫比乌斯函数板子 1 int N = 10000000; 2 int not_prim[10000050],prim[10000050]; 3 long long ...

  7. 良心发现,时隔一年再回首莫比乌斯反演(公式性质证明+题目练习)

    文章目录 莫比乌斯反演 引入 公式 性质 模板 公式证明 莫比乌斯函数前缀和 题目练习 完全平方数 [HAOI2011]Problemb YY的GCD [SDOI2014]数表 [国家集训队]Cras ...

  8. 莫比乌斯反演学习笔记

    背景: 之前不会用MarkdownMarkdownMarkdown,所以坑没有补. 定义: 以下除法默认向下去整. 对于一个形如Fn=∑d∣nfdF_n=\sum_{d|n}f_dFn​=∑d∣n​f ...

  9. matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...

    数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...

最新文章

  1. Redis NoSQL
  2. 海思移植opencv+车辆检测
  3. 基于visual Studio2013解决面试题之1007鸡蛋和篮子
  4. 水电缴费系统php源码_简易水电费管理系统源程序代码
  5. 面对世界竞争对手,如何拿到Google PDF开源项目PDFium?
  6. micropython esp32手册_使用ESP32控制板(二):燒錄MicroPython韌體
  7. 算法高级(13)-常见负载均衡算法Java代码实现
  8. 底层I/O性能大PK:Python/Java被碾压,Rust有望取代C++
  9. 平衡二叉树平衡因子怎么计算_110. 平衡二叉树
  10. 使用Poedit汉化wordpress主题
  11. PlaySound的同步播放与异步播放
  12. python画图-python绘图入门(完整版)
  13. php 微信自动全屏视频设置,微信H5视频自动弹出全屏播放的解决方案
  14. 其它——简历编写、五险一金、补充一些就业相关的东西
  15. excel筛选排序从小到大_EXCEL表格数据从小到大-Excel如何从小到大排列顺序
  16. 思科模拟器的远程连接交换机的实现
  17. 鸿蒙电脑系统连不上打印机,电脑与打印机脱机怎么连接
  18. selenium新浪邮箱注册句柄切换实战
  19. 在迷茫时阅读。。。工作感悟
  20. Simcenter Flotherm XT案例练习

热门文章

  1. Android 扫描SD卡中的所有视频文件
  2. Service之bindService
  3. 下载的模型的位置(例如resnet18.pth)
  4. 目标检测算法之FPN(附FPN代码实现)
  5. Ubuntu 18.04 安装中文输入法
  6. python3 try except or_Python基础10:try except异常处理详解
  7. MySQL模糊查询的那些谣言
  8. Spark Streaming和Flume集成指南V1.4.1
  9. HTML标签的书写和嵌套规范
  10. matlab 计算数据转折点,计算轨迹(路径)中的转折点/枢轴点