0x32 约数

0x32 约数

定义

若整数 n n n除以整数 d d d的余数为0,即 d d d能整除 n n n,则称 d d d n n n的约数, n n n d d d的倍数,记为 d ∣ n d|n dn

算术基本定理的推论

在算术基本定理中,若正整数 N N N被唯一分解为 N = p 1 c 1 p 2 c 2 . . . p m c m N=p_1^{c_1}p_2^{c_2}...p_m^{c_m} N=p1c1p2c2...pmcm,其中 c i c_i ci都是正整数, p i p_i pi都是质数,且满足 p 1 < p 2 < . . . < p m p_1<p_2<...<p_m p1<p2<...<pm,则 N N N的正约数集合可写作:
{ p 1 b 1 p 2 b 2 . . . p m b m } , 其中 0 ≤ b i ≤ c i \{p_1^{b_1}p_2^{b_2}...p_m^{b_m} \},其中0\leq b_i \leq c_i {p1b1p2b2...pmbm},其中0bici
N N N的正约数个数为:
( c 1 + 1 ) ∗ ( c 2 + 1 ) ∗ . . . ∗ ( c m + 1 ) = ∏ i = 1 m ( c i + 1 ) (c_1+1)*(c_2+1)*...*(c_m+1)=\prod_{i=1}^m(c_i+1) (c1+1)(c2+1)...(cm+1)=i=1m(ci+1)
N N N的所有正约数的和为:
( 1 + p 1 + p 1 2 + . . . + p 1 c 1 ) ∗ . . . ∗ ( 1 + p m + p m 2 + . . . + p m c m ) = ∏ i = 1 m ( ∑ j = 0 c i ( p i ) j ) (1+p_1+p_1^2+...+p_1^{c_1})*...*(1+p_m+p_m^2+...+p_m^{c_m})=\prod_{i=1}^m(\sum_{j=0}^{c_i}{(p_i)}^j) (1+p1+p12+...+p1c1)...(1+pm+pm2+...+pmcm)=i=1m(j=0ci(pi)j)
N N N的正约数集合——试除法

d ≥ N d\geq \sqrt{N} dN N N N的约数,则 N / d ≤ N N/d\leq \sqrt{N} N/dN 也是 N N N的约数。换言之,约数总是成对出现的(除了对于完全平方数, N \sqrt{N} N 会单独出现)。

因此,只需扫描 d = 1 ∼ N d=1\sim \sqrt{N} d=1N ,尝试 d d d能否整除 N N N,若能整除,则 N / d N/d N/d也是 N N N的约数。时间复杂度为 O ( N ) O(\sqrt{N}) O(N )

int factor[1600],m=0;
for(int i=1;i*i<=n;++i)
{if(n%i==0){factor[++m]=i;if(i!=n/i) factor[++m]=n/i;}
}

试除法的推论:一个整数 N N N的约数个数上界为 2 N 2\sqrt{N} 2N

1 ∼ N 1\sim N 1N每个数的正约数集合——倍数法

若用“试除法”分别求出 1 ∼ N 1\sim N 1N每个数的正约数集合,时间复杂度过高,为 O ( N N ) O(N\sqrt{N} ) O(NN )。可以反过来考虑,对于每个数 d d d 1 ∼ N 1\sim N 1N中以 d d d为约数的数就是 d d d的倍数 d , 2 d , 3 d , . . . , ⌊ N / d ⌋ ∗ d d,2d,3d,...,\lfloor N/d \rfloor *d d,2d,3d,...,N/dd。一下程序采用“倍数法”求出 1 ∼ N 1\sim N 1N每个数的正约数集合:

vector<int> factor[500010];
for(int i=1;i<=n/i;++i)for(int j=1;j<=n/i;++j)factor[i*j].push_back(i);

上述时间复杂度为 O ( N + N / 2 + N / 3 + N / N ) = O ( N l o g N ) O(N+N/2+N/3+N/N)=O(NlogN) O(N+N/2+N/3+N/N)=O(NlogN)

倍数法的推论: 1 ∼ N 1\sim N 1N每个数的约数个数的总和大约为 N l o g N NlogN NlogN

1.最大公约数

定义

若自然数 d d d同时是自然数 a a a b b b的约数,则称 d d d a a a b b b的公约数。在所有 a a a b b b的公约数中最大的一个称为 a a a b b b的最大公约数,记为 g c d ( a , b ) gcd(a,b) gcd(a,b)

若自然数 m m m同时是自然数 a a a b b b的倍数,则称 m m m a a a b b b的公倍数。在所有 a a a b b b的公倍数中最小的一个称为 a a a b b b的最小公倍数,记为 l c m ( a , b ) lcm(a,b) lcm(a,b)

同理,我们也可以定义三个数以及更多个数的最大公约数、最小公倍数。

定理
∀ a , b ∈ N , g c d ( a , b ) ∗ l c m ( a , b ) = a ∗ b \forall a,b \in N,gcd(a,b)*lcm(a,b)=a*b a,bN,gcd(a,b)lcm(a,b)=ab
九章算数▪更相减损术
∀ a , b ∈ N , a ≥ b , 有 g c d ( a , b ) = g c d ( b , a − b ) = g c d ( a , a − b ) \forall a,b \in N,a\geq b,有gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) a,bN,ab,gcd(a,b)=gcd(b,ab)=gcd(a,ab)

∀ a , b ∈ N , 有 g c d ( 2 a , 2 b ) = 2 g c d ( a , b ) \forall a,b\in N,有gcd(2a,2b)=2gcd(a,b) a,bN,gcd(2a,2b)=2gcd(a,b)

欧几里得算法
∀ a , b ∈ N , b ≠ 0 , g c d ( a , b ) = g c d ( b , a m o d b ) \forall a,b \in N,b\neq 0,gcd(a,b)=gcd(b,a\ mod\ b) a,bN,b=0,gcd(a,b)=gcd(b,a mod b)

int gcd(int a,int b)
{return b?gcd(b,a%b):a;
}

使用欧几里得算法求最大公约数的复杂度为 O ( l o g ( a + b ) ) O(log(a+b)) O(log(a+b))。欧几里得算法是常用的求最大公约数的方法。不过高精度除法(取模)不容易实现,需要做高精度运算时,可考虑更相减损术代替欧几里得算法。

2.互质与欧拉函数

定义

∀ a , b ∈ N \forall a,b\in N a,bN,若 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1,则称 a , b a,b a,b互质。

对于三个数或者更多个数的情况,我们把 g c d ( a , b , c ) = 1 gcd(a,b,c)=1 gcd(a,b,c)=1的情况称为 a , b , c a,b,c a,b,c互质。把 g c d ( a , b ) = g c d ( b , c ) = g c d ( c , a ) = 1 gcd(a,b)=gcd(b,c)=gcd(c,a)=1 gcd(a,b)=gcd(b,c)=gcd(c,a)=1称为 a , b , c a,b,c a,b,c两两互质。后者显然是一个更强的条件。

欧拉函数

1 ∼ N 1\sim N 1N中与 N N N互质的数的个数被称为欧拉函数,即为 ϕ ( N ) \phi(N) ϕ(N)

若在算术基本定理中, N = p 1 c 1 p 2 c 2 . . . p m c m N=p_1^{c_1}p_2^{c_2}...p_m^{c_m} N=p1c1p2c2...pmcm,则:
ϕ ( N ) = N ∗ p 1 − 1 p 1 ∗ p 2 − 1 p 2 ∗ . . . ∗ p m − 1 p m = N ∗ ∏ 质数 p ∣ N ( 1 − 1 p ) \phi(N)=N*\frac{p_1-1}{p_1}*\frac{p_2-1}{p_2}*...*\frac{p_m-1}{p_m}=N*\prod_{质数p|N}(1-\frac{1}{p}) ϕ(N)=Np1p11p2p21...pmpm1=N质数pN(1p1)
证明:

p p p N N N的质因子, 1 ∼ N 1\sim N 1N p p p的倍数有 p , 2 p , 3 p , . . . , ( N / p ) ∗ p p,2p,3p,...,(N/p)*p p,2p,3p,...,(N/p)p,共 N / p N/p N/p个。同理,若 q q q也是 N N N的质因子,则 1 ∼ N 1\sim N 1N q q q的倍数有 N / q N/q N/q个。如果我们把这 N / p + N / q N/p+N/q N/p+N/q个数去掉,那么 p ∗ q p*q pq的倍数被排除了两次,需要加回来一次。因此, 1 ∼ N 1\sim N 1N不含有共同质因子 p p p q q q的个数为:
N − N p − N q + N p q = N ∗ ( 1 − 1 p − 1 q + 1 p q ) = N ( 1 − 1 p ) ( 1 − 1 q ) N-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}=N*(1-\frac{1}{p}-\frac{1}{q}+\frac{1}{pq})=N(1-\frac{1}{p})(1-\frac{1}{q}) NpNqN+pqN=N(1p1q1+pq1)=N(1p1)(1q1)
实际上,上述思想被称为容斥思想,我们将在0x37节详细介绍。类似地,可以在 N N N地全部质因子上使用容斥思想,即可以得到 1 ∼ N 1\sim N 1N中不与 N N N含有任何共同质因子的数的个数,也就是与 N N N互质的数的个数。

根据欧拉函数的计算式,我们只需要分解质因数,既可以顺便求出欧拉函数。

int phi(int n)
{int ans=n;for(int i=2;i<=sqrt(n);++i){if(n%i==0){ans=ans/i*(i-1);while(n%i==0) n/=i;}}if(n>1)ans=ans/n*(n-1);return ans;
}

性质 1 ∼ 2 1\sim2 12

1. ∀ n > 1 , 1 ∼ n \forall n>1,1\sim n n>1,1n中与 n n n互质的数的和为 n ∗ ϕ ( n ) / 2 n*\phi(n)/2 nϕ(n)/2

2.若 a , b a,b a,b互质,则 ϕ ( a b ) = ϕ ( a ) ϕ ( b ) \phi(ab)=\phi(a)\phi(b) ϕ(ab)=ϕ(a)ϕ(b)

证明:

因为 g c d ( n , x ) = g c d ( n , n − x ) gcd(n,x)=gcd(n,n-x) gcd(n,x)=gcd(n,nx),所以与 n n n不互质的数 x , n − x x,n-x x,nx成对出现,平均值为 n / 2 n/2 n/2。因此,与 n n n互质的数的平均值也是 n / 2 n/2 n/2,进而得到性质1。

根据欧拉函数的计算式,对 a , b a,b a,b分解质因数,直接可得性质2。把性质2推广到一般的函数上,可以得到“积极函数”的概念。

积极函数

如果当 a , b a,b a,b互质时,有 f ( a b ) = f ( a ) ∗ f ( b ) f(ab)=f(a)*f(b) f(ab)=f(a)f(b),那么称函数 f f f为积极函数。

性质 3 ∼ 6 3\sim6 36

3.若 f f f是积极函数,且在算术基本定理中 n = ∏ i = 1 m p i c i n=\prod_{i=1}^{m}p_i^{c_i} n=i=1mpici,则 f ( n ) = ∏ i = 1 m f ( p i c i ) f(n)=\prod_{i=1}^{m}f(p_i^{c_i}) f(n)=i=1mf(pici)

4.设 p p p为质数,若 p ∣ n p\mid n pn p 2 ∣ n p^2 \mid n p2n,则 ϕ ( n ) = ϕ ( n / p ) ∗ p \phi(n)=\phi(n/p)*p ϕ(n)=ϕ(n/p)p

5.设 p p p为质数,若 p ∣ n p\mid n pn p 2 ∤ n p^2\nmid n p2n,则 ϕ ( n ) = ϕ ( n / p ) ∗ ( p − 1 ) \phi(n)=\phi(n/p)*(p-1) ϕ(n)=ϕ(n/p)(p1)

6. ∑ d ∣ n ϕ ( d ) = n \sum_{d|n}\phi(d)=n dnϕ(d)=n

证明:

n n n分解质因数,按照积极函数的定义,性质3显然成立。

p ∣ n p\mid n pn p 2 ∣ n p^2\mid n p2n,则 n , n / p n,n/p n,n/p包含相同的的质因子,只是 p p p的质数不同。直接把 ϕ ( n ) \phi(n) ϕ(n) ϕ ( p / n ) \phi(p/n) ϕ(p/n)按照欧拉函数的就算公式写出,二者相除,商为 p p p,所以性质4成立。

p ∣ n p\mid n pn p 2 ∤ n p^2\nmid n p2n,则 p , n / p p,n/p p,n/p互质,由 ϕ \phi ϕ是积极函数得 ϕ ( n ) = ϕ ( n / p ) ∗ ϕ ( p ) \phi(n)=\phi(n/p)*\phi(p) ϕ(n)=ϕ(n/p)ϕ(p),而 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1,所以性质5成立。

f ( n ) = ∑ d ∣ n ϕ ( d ) f(n)=\sum_{d\mid n}\phi(d) f(n)=dnϕ(d)。用乘法分配律展开比较,再利用 ϕ \phi ϕ是积极函数,得到:若 n , m n,m n,m互质,则 f ( n m ) = ∑ d ∣ n m ϕ ( d ) = ( ∑ d ∣ n ϕ ( d ) ) ∗ ( ∑ d ∣ m ϕ ( d ) ) = f ( n ) ∗ f ( m ) f(nm)=\sum_{d\mid nm}\phi(d)=(\sum_{d\mid n}\phi(d))*(\sum_{d\mid m}\phi(d))=f(n)*f(m) f(nm)=dnmϕ(d)=(dnϕ(d))(dmϕ(d))=f(n)f(m)。即 ∑ d ∣ n ϕ ( d ) \sum_{d\mid n}\phi(d) dnϕ(d)是积极函数。对于单个质因子, f ( p m ) = ∑ d ∣ p m ϕ ( d ) = ϕ ( 1 ) + ϕ ( p ) + ϕ ( p 2 ) + . . . + ϕ ( p m ) f(p^m)=\sum_{d\mid p^m}\phi(d)=\phi(1)+\phi(p)+\phi(p^2)+...+\phi(p^m) f(pm)=dpmϕ(d)=ϕ(1)+ϕ(p)+ϕ(p2)+...+ϕ(pm)是一个等比数列求和再加1,结果为 p m p^m pm。所以 f ( n ) = ∏ i = 1 m f ( p i c i ) = ∏ i = 1 m p i c i = n f(n)=\prod_{i=1}^m f(p_i^{c_i})=\prod_{i=1}^m p_i^{c_i}=n f(n)=i=1mf(pici)=i=1mpici=n,性质6成立。

有关积极函数还有许多内容,并可延伸出狄利克雷卷积、莫比乌斯反演以及一系列相关的快速求和问题。

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

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

相关文章

c 小熊猫 c++ IDE编译ffmpeg 设置

菜单-》运行-》编译器选项-》链接时加入下列选项 &#xff1a; -I /usr/local/ffmpeg/include -L /usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lm 本机ffmpeg存储位置&#xff1a;include &#xff1a;/usr/local/ff…

十三、QPalette的简单使用(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在实际应用中&#xff0c;经常需要改变某个控件的颜色外观&#xff0c;如背景、文字颜色等。Qt提供的调色板类 QPalette 专门用于管理对话框的外观显示。QPalette 类相当于对话框或是控件的调色板&…

metartc5_jz源码阅读-yang_rtcpush_on_rtcp_ps_feedback

// (Payload-specific FB messages&#xff0c;有效载荷反馈信息)&#xff0c;这个函数处理Payload重传 int32_t yang_rtcpush_on_rtcp_ps_feedback(YangRtcContext *context,YangRtcPushStream *pub, YangRtcpCommon *rtcp) {if (context NULL || pub NULL)return ERROR_RTC…

记录:排查create_ap偶发无法开启自发AP的问题

背景说明&#xff1a; 系统&#xff1a;Xubuntu16.04&#xff1b;内核&#xff1a;4.14&#xff1b;无线网卡&#xff1a;EDIMAX EW-7822UAC 关于无线网卡的驱动安装和create_ap配置参考博文&#xff1a;Xubuntu16.04系统中使用EDIMAX EW-7822UAC无线网卡开启5G自发AP 目录 问题…

分布式系统的三字真经CAP

文章目录 前言C&#xff08;Consistency 数据一致性&#xff09;A&#xff08;Availability 服务可用性&#xff09;P&#xff08;Partition Tolerance 分区容错性&#xff09;CAP理论最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我一起探索一下分布式系统的三字真经C…

大数据调度框架Oozie,这个学习网站让你事半功倍!

Oozie是一个基于工作流引擎的开源框架&#xff0c;由Cloudera公司贡献给Apache。它主要用于管理和调度Apache Hadoop作业&#xff0c;支持的任务类型包括Hadoop MapReduce、Pig Jobs等。 Oozie的核心概念包括workflow jobs和coordinator jobs。Workflow jobs是由多个动作&#…

解决ssh: connect to host github.com port 22: Connection refused

ssh: connect to host github.com port 22: Connection refused 是连接github.com的端口号22拒绝连接。 可以使用github的443端口。 解决方案 在~/.ssh/config中添加如下字段&#xff1a; $ vim ~/.ssh/config # 如果没有config 文件就新建一个 Host github.comHostname ss…

Jmeter 性能-监控服务器

Jmeter监控Linux需要三个文件 JMeterPlugins-Extras.jar (包&#xff1a;JMeterPlugins-Extras-1.4.0.zip) JMeterPlugins-Standard.jar (包&#xff1a;JMeterPlugins-Standard-1.4.0.zip) ServerAgent-2.2.3.zip 1、Jemter 安装插件 在插件管理中心的搜索Servers Perform…

xtu-c语言考试复习-2

1223 确实写不出&#xff0c;数据远超过64位&#xff0c;难道用数组存吗&#xff0c;但是不好计算&#xff0c;想到的思路是取模&#xff0c;一边计算&#xff0c;一边取模&#xff0c;就不会超过数据范围&#xff0c;但是数学原理没懂&#xff0c;所以做不出来 看了下自己以…

AIGC视频生成:Pika1.0快速入门详解

Pika1.0快速入门详解 一、简介二、登录三、参数设置1、改变画面大小&#xff08;Aspect ratio&#xff09;2、改变帧数大小&#xff08;Frames per second&#xff09;3、镜头平移&#xff08;Camera control&#xff09;4、画面运动控制&#xff08;Strength of motion&#x…

VCG 网格面片法向量平滑

文章目录 一、简介二、实现代码三、实现效果一、简介 思路其实很简单,即是将当前面的法线替换为该面相邻面的法线的平均值,当前邻近法线需要根据邻近面片的面积进行加权。虽然思路很简单,但是很有效,这对一些重建算法效果也有所提升。 二、实现代码 //VCG #include <vc…

永不停止,永远在路上!MIAOYUN 2023年度回顾

2023 MIAOYUN年度关键词&#xff1a;坚持/沉淀/成长 2023年&#xff0c;我们身处虚浮遥荡的世界&#xff1a;支原体肺炎、流感接二连三、经济下行成热词、人人思危&#xff1b;更有暴雨成灾&#xff0c;核污水扩散&#xff0c;战火与地震不断。 坏事发生时&#xff0c;你有三种…

【NLP】多标签分类【上】

简介 《【NLP】多标签分类》主要介绍利用三种机器学习方法和一种序列生成方法来解决多标签分类问题&#xff08;包含实验与对应代码&#xff09;。共分为上下两篇&#xff0c;上篇聚焦三种机器学习方法&#xff0c;分别是&#xff1a;Binary Relevance (BR)、Classifier Chain…

绝地求生:【PC】第27赛季第2轮更新公告

各位玩家大家好&#xff01;欢迎收看本期闲游盒更新公告。 正式服维护时间 ※ 下列时间可能会根据维护情况而发生变化。 1月10日上午8:00 – 下午4:30 地图轮换 ※ 地图轮换将于每周三上午10点进行。 ※ 在随机选择地图的地区中&#xff0c;第1周可选择荣都地图&#xff0c…

Intellij-idea 如何编译maven工程*

在 Intellij IDEA 中编译 Maven 工程的步骤如下&#xff1a; 打开你的 Maven 工程。如果工程已经在 IDEA 中打开&#xff0c;那么你可以直接进行下一步。如果没有&#xff0c;你可以通过File -> Open 在弹出的对话框中选择你的 Maven 工程路径进行打开。 打开 Maven 项目窗…

Java SE入门及基础(11)

程序调试 1. 什么是程序调试 当程序出现问题时&#xff0c;我们希望程序能够暂停下来&#xff0c;然后通过我们操作使代码逐行执行&#xff0c;观察整个过程中变量的变化是否按照我们设计程序的思维变化&#xff0c;从而找问题并解决问题&#xff0c;这个过程称之为程序调试…

从零开发短视频电商 PaddleOCR Java推理 (一)飞桨引擎推理

文章目录 简介方式一&#xff1a;DJL 飞浆引擎 飞桨模型方式二&#xff1a;ONNXRuntime 飞桨转换后的ONNX模型&#xff08;Paddle2ONNX&#xff09; 添加依赖文字识别OCR过程分析文字区域检测文字角度检测文字识别&#xff08;裁减旋转后的文字区域&#xff09; 高级替换模型…

MySQL 和 Redis 如何保证数据一致性,通过MySQL的binlog实现

1、简介 MySQL 和 Redis 如何保证数据一致性&#xff0c;目前大多讨论的是先更新Redis后更新MySQL&#xff0c;还是先更新MySQL 后更新Redis&#xff0c;这两种方式在实际的应用场景中都不能确保数据的完全一致性&#xff0c;在某些情况下会出现问题&#xff0c;本文介绍使用 C…

遥感影像-语义分割数据集:高分卫星-云数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该云数据集包括RGB三通道的高分辨率图像&#xff0c;包含高分一、高分二及宽幅数据集。 KeyValue卫星类型高分系列覆盖区域未知场景未知分辨率1m、2m、8m数量12000单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通道数三通道标签图…

vivado 使用源文件

使用源文件 概述 源文件包括从AMD IP添加的设计源、知识产权&#xff08;IP&#xff09;源目录、RTL设计源、从系统添加的数字信号处理&#xff08;DSP&#xff09;源生成器工具和IP子系统&#xff0c;也称为块设计&#xff0c;由IP集成商创建AMD Vivado的功能™ 设计套件。源…