【Luogu】 P5176 公约数

题目链接

点击打开链接

题目解法

首先证明一个结论: ( i j , i k , j k ) = ( i , j ) ( i , k ) ( j , k ) ( i , j , k ) (ij,ik,jk)=\frac{(i,j)(i,k)(j,k)}{(i,j,k)} (ij,ik,jk)=(i,j,k)(i,j)(i,k)(j,k)
考虑对于 i , j , k i,j,k i,j,k 的质因子 p p p 的次数考虑,假设次数分别为 a , b , c ( a ≤ b ≤ c ) a,b,c(a\le b\le c) a,b,c(abc)
对于右边, ( i , j , k ) = a (i,j,k)=a (i,j,k)=a ( i , j ) = a , ( i , k ) = a , ( j , k ) = b (i,j)=a,(i,k)=a,(j,k)=b (i,j)=a,(i,k)=a,(j,k)=b,所以 ( i , j ) ( i , k ) ( j , k ) ( i , j , k ) = a b \frac{(i,j)(i,k)(j,k)}{(i,j,k)}=ab (i,j,k)(i,j)(i,k)(j,k)=ab
对于左边, i j = a b , i k = a c , j k = b c ij=ab,\;ik=ac,\;jk=bc ij=ab,ik=ac,jk=bc,所以 ( i j , i k , j k ) = a b (ij,ik,jk)=ab (ij,ik,jk)=ab
所以 左边 = 右边
可以推广到任意数的情况

所以
A n s = ∑ i = 1 n ∑ j = 1 m ∑ k = 1 p ( i , j ) ( i , k ) ( j , k ) ( i , j , k ) ∗ ( i , j , k ) ∗ ( ( i , j ) ( i , k ) ( j , k ) + ( i , k ) ( i , j ) ( j , k ) + ( j , k ) ( i , j ) ( i , k ) ) Ans=\sum^{n}_{i=1}\sum^{m}_{j=1}\sum^{p}_{k=1}\frac{(i,j)(i,k)(j,k)}{(i,j,k)}*(i,j,k)*\left(\frac{(i,j)}{(i,k)(j,k)}+\frac{(i,k)}{(i,j)(j,k)}+\frac{(j,k)}{(i,j)(i,k)}\right) Ans=i=1nj=1mk=1p(i,j,k)(i,j)(i,k)(j,k)(i,j,k)((i,k)(j,k)(i,j)+(i,j)(j,k)(i,k)+(i,j)(i,k)(j,k))
= ∑ i = 1 n ∑ j = 1 m ∑ k = 1 p ( i , j ) ( i , k ) ( j , k ) ∗ ( ( i , j ) ( i , k ) ( j , k ) + ( i , k ) ( i , j ) ( j , k ) + ( j , k ) ( i , j ) ( i , k ) ) =\sum^{n}_{i=1}\sum^{m}_{j=1}\sum^{p}_{k=1}(i,j)(i,k)(j,k)*\left(\frac{(i,j)}{(i,k)(j,k)}+\frac{(i,k)}{(i,j)(j,k)}+\frac{(j,k)}{(i,j)(i,k)}\right) =i=1nj=1mk=1p(i,j)(i,k)(j,k)((i,k)(j,k)(i,j)+(i,j)(j,k)(i,k)+(i,j)(i,k)(j,k))
= ∑ i = 1 n ∑ j = 1 m ∑ k = 1 p ( i , j ) 2 + ( i , k ) 2 + ( j , k ) 2 =\sum^{n}_{i=1}\sum^{m}_{j=1}\sum^{p}_{k=1}(i,j)^2+(i,k)^2+(j,k)^2 =i=1nj=1mk=1p(i,j)2+(i,k)2+(j,k)2
考虑对于 ( i , j ) 2 (i,j)^2 (i,j)2 的项只与 i , j i,j i,j 有关,所以考虑计算它的系数
所以 A n s = p ∗ ∑ i = 1 n ∑ j = 1 m ( i , j ) 2 + m ∗ ∑ i = 1 n ∑ k = 1 p ( i , k ) 2 + n ∗ ∑ j = 1 m ∑ k = 1 p ( j , k ) 2 Ans=p*\sum^{n}_{i=1}\sum^{m}_{j=1}(i,j)^2+m*\sum^{n}_{i=1}\sum^{p}_{k=1}(i,k)^2+n*\sum^{m}_{j=1}\sum^{p}_{k=1}(j,k)^2 Ans=pi=1nj=1m(i,j)2+mi=1nk=1p(i,k)2+nj=1mk=1p(j,k)2

考虑单独计算 ∑ i = 1 n ∑ j = 1 m ( i , j ) 2 \sum^{n}_{i=1}\sum^{m}_{j=1}(i,j)^2 i=1nj=1m(i,j)2,其他的同理
根据莫比乌斯反演,考虑枚举 d d d
∑ i = 1 n ∑ j = 1 m ( i , j ) 2 \sum^{n}_{i=1}\sum^{m}_{j=1}(i,j)^2 i=1nj=1m(i,j)2
= ∑ d = 1 n d 2 ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ [ ( i , j ) = 1 ] =\sum_{d=1}^{n}d^2\sum^{\lfloor\frac{n}{d}\rfloor}_{i=1}\sum^{\lfloor\frac{n}{d}\rfloor}_{j=1}[(i,j)=1] =d=1nd2i=1dnj=1dn[(i,j)=1]
接下来就是套路的莫比乌斯反演
最终可以化的答案为 ∑ T = 1 n ⌊ n T ⌋ ⌊ m T ⌋ ∑ k ∣ T k 2 ∗ μ ( T k ) \sum_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{k|T}k^2*\mu(\frac{T}{k}) T=1nTnTmkTk2μ(kT)
其中前半部分可以数论分块做,可以做到 O ( n ) O(\sqrt n) O(n )
考虑如何将 ∑ k ∣ T k 2 ∗ μ ( T k ) \sum_{k|T}k^2*\mu(\frac{T}{k}) kTk2μ(kT) 在线性的时间内预处理出
f ( n ) = n 2 , g ( n ) = μ ( n ) , h ( n ) = ∑ k ∣ n k 2 ∗ μ ( n k ) f(n)=n^2,\;g(n)=\mu(n),\;h(n)=\sum_{k|n}k^2*\mu(\frac{n}{k}) f(n)=n2,g(n)=μ(n),h(n)=knk2μ(kn)
f ∗ g = h f*g=h fg=h
因为 f f f g g g 都是积性函数,所以卷积出来的 h h h 也是积性函数
考虑线性筛
现在需要解决 h ( p k ) ( k > 1 ) h(p^k)(k>1) h(pk)(k>1) 的情况如何递推
h ( p ) = ∑ k ∣ p k 2 ∗ μ ( p k ) = p 2 − 1 h(p)=\sum_{k|p}k^2*\mu(\frac{p}{k})=p^2-1 h(p)=kpk2μ(kp)=p21
h ( p k ) = ∑ k ∣ p k 2 ∗ μ ( p k ) = μ ( p k ) + p 2 ∗ μ ( p k − 1 ) + . . . + p 2 ( k − 1 ) ∗ μ ( p ) + p 2 k ∗ μ ( 1 ) h(p^k)=\sum_{k|p}k^2*\mu(\frac{p}{k})=\mu(p^k)+p^2*\mu(p^{k-1})+...+p^{2(k-1)}*\mu(p)+p^{2k}*\mu(1) h(pk)=kpk2μ(kp)=μ(pk)+p2μ(pk1)+...+p2(k1)μ(p)+p2kμ(1)
考虑 μ ( p k ) ( k > 1 ) = 0 \mu(p^k)(k>1)=0 μ(pk)(k>1)=0
所以 h ( p k ) = p 2 k − p 2 ( k − 1 ) = p 2 ∗ h ( p k − 1 ) h(p^k)=p^{2k}-p^{2(k-1)}=p^2*h(p^{k-1}) h(pk)=p2kp2(k1)=p2h(pk1)

时间复杂度 O ( n + T n ) O(n+T\sqrt n) O(n+Tn )

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N(20000100),P(1e9+7);
int h[N],pr[N/10],cnt;
bool vis[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
void init(int n){h[1]=1;for(int i=2;i<=n;i++){if(!vis[i]) pr[++cnt]=i,h[i]=((LL)i*i%P-1+P)%P;for(int j=1;j<=cnt&&i<=n/pr[j];j++){vis[pr[j]*i]=1;if(i%pr[j]==0){h[pr[j]*i]=(LL)h[i]*pr[j]%P*pr[j]%P;break;}h[pr[j]*i]=(LL)h[i]*h[pr[j]]%P;}}for(int i=2;i<=n;i++) h[i]=(h[i-1]+h[i])%P;
}
int ask(int n,int m){int t=min(n,m),res=0;for(int i=1,j;i<=t;i=j+1){j=min(n/(n/i),m/(m/i));res=(res+(LL)(n/i)*(m/i)%P*(h[j]-h[i-1]+P)%P)%P;}return res;
}
void work(){int n=read(),m=read(),p=read();printf("%d\n",(LL)((LL)p*ask(n,m)%P+(LL)m*ask(n,p)%P+(LL)n*ask(m,p)%P)%P);
}
int main(){init(2e7); int T=read();while(T--) work();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android在子线程中对UI进行操作——AsyncTask

以下内容摘自郭霖《第一行代码》第三版 使用AsyncTask AsyncTask是一个抽象类&#xff0c;所以如果我们想使用它&#xff0c;就必须创建一个子类去继承它。在继承时我们可以为AsyncTask类指定3个泛型参数&#xff1a; Params。在执行AsyncTask时需要传入的参数&#xff0c;可…

精细呵护:如何维护自己的电脑,提升性能和寿命

导语&#xff1a; 在当今数字化时代&#xff0c;电脑已经成为我们日常生活和工作的必需品。然而&#xff0c;就像任何其他设备一样&#xff0c;电脑需要得到适当的维护和保养&#xff0c;以保持良好的性能和延长使用寿命。在本文中&#xff0c;我们将分享一些简单而有效的方法&…

AI For Engineers 线上参会指南

AI For Engineers 线上参会指南 欢迎您报名参加 AI For Engineers&#xff1a;工程师 AI 全球会议&#xff0c;为了让各位参会者参会体验更佳&#xff0c;更好地利用本次会议收获更多。Altair 特别为各位准备了线上参会指南&#xff0c;一起来看看吧~ 会议时间&#xff1a;20…

掌握Python的X篇_12_如何使用VS Code调试Python程序

本篇将会介绍如何使用VS Code调试Python程序。 文章目录 1. 什么是调试2. 断点3. 如何启动调试4. 监视窗口5. 单步 1. 什么是调试 我们可以利用VS Code对Python代码进行调试。所谓调试&#xff0c;大家可以理解成有能力将程序进行 “慢动作播放”让我们有机会看到程序一步一步…

flutter minio

背景 前端 经常需要上传文件 图片 视频等等 到后端服务器&#xff0c; 如果到自己服务器 一般会有安全隐患。也不方便管理这些文件。如果要想使用一些骚操作 比如 按照前端请求生成不同分辨率的图片&#xff0c;那就有点不太方便了。 这里介绍以下 minio&#xff0c;&#xff0…

flutter开发实战-父子Widget组件调用方法

flutter开发实战-父子Widget组件调用方法 在最近开发中遇到了需要父组件调用子组件方法&#xff0c;子组件调用父组件的方法。这里记录一下方案。 一、使用GlobalKey 父组件使用globalKey.currentState调用子组件具体方法&#xff0c;子组件通过方法回调callback方法调用父组…

PHP-Mysql图书管理系统--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页phpStudy 设置导数据库后台的管理界面数据库表结构项目目录如图&#xff1a;代码部分&#xff1a;主页的head 配套资源作业&#xff1a; 本系列校训 用免费公开视频&am…

java设计模式-工厂模式(上)

什么是工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式&#xff…

LeetCode32.Longest-Valid-Parentheses<最长有效括号>

题目&#xff1a; 思路&#xff1a; 遍历括号.遇到右括号然后前一个是左括号 那就res2,然后重定位 i 的值 并且长度减少2; 但是问题在于无法判断最长的括号.只能得到string内的全部括号长度. 错误代码: 写过一题类似的,那题是找括号数.记得是使用的栈,但是死活写不出来. 看完…

Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip

1. 在写分布式im时nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate&#xff08;长连接服务&#xff09; logic &#xff08;业务&#xff09; lsb &#xff08;负载均衡&#xff09;store&#xff08;存储&#xff09; - Gitee.com&#xff0c;需要指定某一…

[ 容器 ] Docker Compose 编排

目录 Docker Compose 环境安装下载安装查看版本YAML 文件格式及编写注意事项使用 YAML 时需要注意下面事项 Docker Compose配置常用字段Docker Compose 常用命令Docker Compose 文件结构 Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品&#xff0c;因此需要安装…

当机器人变硬核:探索深度学习中的时间序列预测

收藏自&#xff1a;Wed, 15 Sep 2021 10:32:56 UTC 摘要&#xff1a;时间序列预测是机器学习和深度学习领域的一个重要应用&#xff0c;它可以用于预测未来趋势、分析数据模式和做出决策。本文将介绍一些基本概念和常用方法&#xff0c;并结合具体的案例&#xff0c;展示如何使…

React Native 0.72 版本,带来诸多更新

经过漫长的等待,React Native 终于迎来了0.72 版本,此处版本带来了Metro重要的功能更新、性能优化、开发人员体验的改进以及其他一些重要的变化。我们可以从下面的链接中获取此次版本更新的内容:0.72更新内容 一、Metro 新功能 众所周知,Metro 是 React Native 默认的 Jav…

idea插件开发-自定义语言4-Syntax Highlighter

SyntaxHighlighter用于指定应如何突出显示特定范围的文本&#xff0c;ColorSettingPage可以定义颜色。 一、Syntax Highter 1、文本属性键&#xfeff; TextAttributesKey用于指定应如何突出显示特定范围的文本。不同类型的数据比如关键字、数字、字符串等如果要突出显示都需…

代码-【5 二叉树非递归后序遍历,找指定结点的父节点】

二叉树T按二叉链表存储&#xff0c;求指定结点q的父节点&#xff1a;

【Ubuntu系统18.04虚拟机ros下实现darknet_ros(YOLO V3)检测问题解析最全】

原本打算在搭载Ubuntu18.04的智能小车上面运行使用darknet_ros 包来进行yolov3的检测&#xff0c;但是运行过程中遇到了不少问题&#xff0c;从头到尾部的运行包括遇到的解决方法以及对应的文章一并列出&#xff0c;免得到处查找。 首先是在ROS下实现darknet_ros(YOLO V3)检测…

浅谈自动化测试

谈谈那些实习测试工程师应该掌握的基础知识&#xff08;一&#xff09;_什么时候才能变强的博客-CSDN博客https://blog.csdn.net/qq_17496235/article/details/131839453谈谈那些实习测试工程师应该掌握的基础知识&#xff08;二&#xff09;_什么时候才能变强的博客-CSDN博客h…

使用克拉默法则进行三点定圆(二维)

目录 1.二维圆2.python代码3.计算结果 本文由CSDN点云侠原创&#xff0c;爬虫网站请自重。 1.二维圆 已知不共线的三个点&#xff0c;设其坐标为 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​)、 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)、 ( x 3 , y 3 ) (x_3,y_3) (x3​,y3​)&#xf…

FSM:Full Surround Monodepth from Multiple Cameras

参考代码&#xff1a;None 介绍 深度估计任务作为基础环境感知任务&#xff0c;在基础上构建的3D感知才能更加准确&#xff0c;并且泛化能力更强。单目的自监督深度估计已经有MonoDepth、ManyDepth这些经典深度估计模型了&#xff0c;而这篇文章是对多目自监督深度估计进行探…

使用云服务器和Frp(快速反向代理)框架快速部署实现内网穿透

目录 一. 背景1.1 内网穿透1.2 Frp介绍1.3 Frp配置流程 二. 云服务器配置2.1 配置安全组2.2 编写frps.ini 三. 内网主机配置3.1 编辑frpc.ini文件3.2 启动服务并配置开机自启动 四. 参考文献 一. 背景 现在有一台ubuntu云服务器&#xff0c;我想通过内网穿透将一台内网的主机当…