正题

题目链接:http://www.ybtoj.com.cn/contest/122/problem/3


题目大意

S(i)S(i)S(i)表示iii的约数个数,QQQ次询问给出n,mn,mn,m求
∑a=1n∑b=1mS(a2)×S(b2)×S(a×b)\sum_{a=1}^n\sum_{b=1}^mS(a^2)\times S(b^2)\times S(a\times b)a=1∑n​b=1∑m​S(a2)×S(b2)×S(a×b)

1≤Q≤104,1≤n,m≤2×1051\leq Q\leq 10^4,1\leq n,m\leq 2\times 10^51≤Q≤104,1≤n,m≤2×105


解题思路

前面的推式子挺套路的
首先我们要搞定S(n2)S(n^2)S(n2)这个东西,一个经典的结论就是S(n×m)=∑i∣n∑j∣m[gcd(i,j)=1]S(n\times m)=\sum_{i|n}\sum_{j|m}[gcd(i,j)=1]S(n×m)=∑i∣n​∑j∣m​[gcd(i,j)=1]。莫反一下就有
S(a×b)=∑d∣(a×b)μ(d)∑i×d∣a∑j×d∣b1S(a\times b)=\sum_{d|(a\times b)}\mu(d)\sum_{i\times d|a}\sum_{j\times d|b}1S(a×b)=d∣(a×b)∑​μ(d)i×d∣a∑​j×d∣b∑​1
所以就有
S(n2)=∑d∣nμ(d)S(nd)2S(n^2)=\sum_{d|n}\mu(d)S(\frac{n}{d})^2S(n2)=d∣n∑​μ(d)S(dn​)2
用线性筛筛出前面的SSS,然后O(nlog⁡n)O(n\log n)O(nlogn)求出h(n)=S(n2)h(n)=S(n^2)h(n)=S(n2)

然后化一下式子
∑a=1n∑b=1mh(a)×h(b)∑i∣a∑j∣b[gcd(i,j)=1]\sum_{a=1}^n\sum_{b=1}^mh(a)\times h(b)\sum_{i|a}\sum_{j|b}[gcd(i,j)=1]a=1∑n​b=1∑m​h(a)×h(b)i∣a∑​j∣b∑​[gcd(i,j)=1]
∑d=1μ(d)(∑d∣i∑i∣ah(a))(∑d∣j∑j∣bh(b))\sum_{d=1}\mu(d)(\sum_{d|i}\sum_{i|a}h(a))(\sum_{d|j}\sum_{j|b}h(b))d=1∑​μ(d)(d∣i∑​i∣a∑​h(a))(d∣j∑​j∣b∑​h(b))
∑d=1μ(d)(∑d∣aS(ad)h(a))(∑d∣bS(bd)h(b))\sum_{d=1}\mu(d)(\sum_{d|a}S(\frac{a}{d})h(a))(\sum_{d|b}S(\frac{b}{d})h(b))d=1∑​μ(d)(d∣a∑​S(da​)h(a))(d∣b∑​S(db​)h(b))

然后就好像没得化简了,先处理出F(d,n)=∑i=1nh(i×d)S(i)F(d,n)=\sum_{i=1}^nh(i\times d)S(i)F(d,n)=∑i=1n​h(i×d)S(i)

发现ddd很大的时候后面那个东西的取值就很小,但是ddd很多,需要快速处理。

设定一个分界值TTT,每次小于TTT的部分我们就暴力用FFF数组计算,大于TTT的部分我们预处理出一个
G(d,i,j)=∑x=T+1dF(i)F(j)μ(d)G(d,i,j)=\sum_{x=T+1}^dF(i)F(j)\mu(d)G(d,i,j)=x=T+1∑d​F(i)F(j)μ(d)
然后整除分块计算。

这里的kkk取N23N^{\frac{2}{3}}N32​会平均一些,时间复杂度O(n43+Qn23)O(n^{\frac{4}{3}}+Qn^{\frac{2}{3}})O(n34​+Qn32​)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
using namespace std;
const ll N=2e5+10,P=1<<30;
ll q,n,m,cnt,pri[N],mu[N],S[N],sg[N],g[N],o[N];
vector<int>f[N],d[N];
bool v[N];
void prime(){mu[1]=sg[1]=1;for(ll i=2;i<N;i++){if(!v[i])pri[++cnt]=i,mu[i]=-1,g[i]=2,sg[i]=2;for(ll j=1;j<=cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0){g[i*pri[j]]=g[i]+1;sg[i*pri[j]]=sg[i]/g[i]*g[i*pri[j]];break;}mu[i*pri[j]]=-mu[i];g[i*pri[j]]=2;sg[i*pri[j]]=sg[i]*sg[pri[j]];}}for(ll i=1;i<N;i++)for(ll j=i;j<N;j+=i)(S[j]+=sg[j/i]*sg[j/i]*mu[i]%P)%=P;return;
}
signed main()
{freopen("math.in","r",stdin);freopen("math.out","w",stdout);prime();scanf("%lld",&q);ll lim=2e5;ll T=(ll)pow(lim,2.0/3.0)+1;f[0].resize(lim+1);for(ll i=1;i<=lim;i++){f[i].push_back(0); for(ll j=1;j<=lim/i;j++){ll tmp=f[i][j-1];f[i].push_back((tmp+S[i*j]*sg[j])%P);}}d[T].resize((lim/T)*(lim/T)+1);for(ll i=T+1;i<=lim;i++){ll p=lim/i;d[i].resize(p*p+1);for(ll j=1,sum=0;j<=lim/i;j++)for(ll k=j;k<=lim/i;k++)d[i][(j-1)*p+k]=(d[i-1][(j-1)*o[i-1]+k]+f[i][j]*f[i][k]*mu[i])%P;o[i]=p;}while(q--){scanf("%lld%lld",&n,&m);if(n>m)swap(n,m);ll ans=0;for(ll i=1;i<=min(T,n);i++)(ans+=1ll*f[i][n/i]*f[i][m/i]*mu[i]%P)%=P;for(ll l=T+1,r;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));(ans+=d[r][(n/l-1)*o[r]+m/l]-d[l-1][(n/l-1)*o[l-1]+m/l])%=P;}printf("%lld\n",(ans+P)%P);}return 0;
}

YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】相关推荐

  1. P4240-毒瘤之神的考验【莫比乌斯反演,平衡规划】

    正题 题目链接:https://www.luogu.com.cn/problem/P4240 题目大意 QQQ组数据给出n,mn,mn,m求 ∑i=1n∑j=1mφ(i×j)\sum_{i=1}^n\ ...

  2. 锦标赛排序、洪水填充算法、平衡规划

    锦标赛排序 锦标赛排序(胜者树,记录胜者) 锦标赛排序(胜者树,记录胜者) - Class Xman - 博客园 锦标赛排序(胜者树,记录胜者)_继续微笑lsj-CSDN博客_锦标赛排序 数据结构之树 ...

  3. SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...

  4. 数学:莫比乌斯反演-约数个数和

    BZOJ3994:利用莫比乌斯反演求约数个数和 解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导 很麻烦 1 #include<cstdio> 2 #inclu ...

  5. 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演

    题目描述 设d(x)为x的约数个数,给定N.M,求   输入 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. 输出 T行,每行一个整数,表示你 ...

  6. 【数学专题】莫比乌斯反演与积性函数

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 莫比乌斯反演 AcWing 2702. problem b AcWing 1358. 约数个数和(莫 ...

  7. 模板:莫比乌斯反演(数论)

    文章目录 前言 整除分块 代码 积性函数 线性筛 狄利克雷卷积 莫比乌斯反演 trick 所谓莫比乌斯反演,就是莫比乌斯进行的反演 (逃) 前言 在一些需要整除的式子和 gcd⁡,lcm⁡\gcd,\ ...

  8. 数论 —— 莫比乌斯反演

    [反演] 假设我们手头有个数列 F,通过某种变换 H,可以得到函数 G.,即: 但现在只有函数 G,需要求 F,那么我们就需要寻找一种变换 ,使得 G 在经过这种变换后能够获得 F,这个过程即为反演, ...

  9. 莫比乌斯反演入门题目(详细)

    目录 luoguP2568 GCD hdu1695 GCD luogu3455[POI2007]ZAP-Queries luogu2522 [HAOI2011]Problem b P4318 完全平方 ...

最新文章

  1. c语言后缀表达式构造二叉树,C ++程序为后缀表达式构造表达式树
  2. inline函数使用容易导致出错的问题
  3. 结合keepalived实现redis群集高可用故障自动切换
  4. 设计模式之单例设计模式(饿汉式)
  5. 正在安装虚拟网络驱动程序卡住了_如何在Hyper-V、Virtual PC等虚拟机中使用USB设备...
  6. golang string 转换 uint64_Golang 的 #x27;print#x27; 源码解读
  7. vue mxgraph渲染xml页面_Vue的两个版本
  8. 搭建测试环境_当面试时被问到“搭建过测试环境吗”, 身为小白要怎么回答?...
  9. 2021-2025年中国伊维菌素原料药行业市场供需与战略研究报告
  10. 不止 JavaScript 与 React,前端程序员必备的 9 大技能!
  11. Xcode中AutoLayOut的简单使用
  12. 一阶系统开环传递函数表达式_第四讲 控制系统的方框图
  13. sqlite3_英英词典
  14. 数据库涉及到哪些技术?
  15. win10共享文件夹的创建、访问凭据一直提示“用户名或密码错误”的解决办法
  16. 【js高级 Day3】深入理解原型的方式继承,借用构造函数继承,组合继承,拷贝继承
  17. C++超市管理系统(MySQL)
  18. 【编译原理】语义分析S属性定义的自下而上计算
  19. 短视频脚本撰写小技巧,不同的短视频类型要使用不同的撰写方法
  20. vmware中Linux虚拟机的克隆

热门文章

  1. Java并发编程实战_真香!阿里P8耗时半年著作660页Java高并发与网络编程实战总结...
  2. swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单
  3. 中南民族大学c语言报告,中南民族大学信C语言实验报告.doc
  4. 如何在mysql中打开mongodb_图解:如何从MySQL移植到MongoDB
  5. android刷新时的圆形动画_Android自定义加载圈动画效果
  6. mysql 基础视图_MySQL基础(4) | 视图
  7. linux下rip服务启动失败,RIP协议_linux系统管理与服务的技术博客_51CTO博客
  8. leetcode209. 长度最小的子数组(滑动窗口)
  9. 7-3 最小生成树-kruskal (10 分)(思路+详解+并查集详解+段错误超时解决)宝 Come
  10. 8种方法解决vue创建项目报错:command failed: npm install --loglevel error