整除相关基本知识

对于整数而言:

定义

如果x没有1和自身自外的约数,则称x是一个质数,或称为素数(prime)。否则这个数称为合数。
定义上,1不是质数,也不是合数。有特别说明的时候,我们把1看做质数。
我们知道符号" ∣ | "表示整除,现在用符号∤表示不整除。(这里是在整除符号上批了一个撇,事实上也有另一种写法是批一个捺)
那么一个数是素数等价于命题 ∀ x ∈ [ 2 , n − 1 ] , x ∤ n \forall x\in [2,n-1],x∤n x[2,n1],xn
那么x∤y等价于y m o d mod mod x≠0

如果gcd(x,y)=1,即x、y并不含有任何除1以外的公约数,则称x与y互质。记作x⊥y。

试除法判断质数

首先根据上面的命题,我们可以暴力枚举每一个x,做检验:

bool is_prime(int n) {
	for(int i=2; i<n; i++)
		if(n%i==0)
			return false;
	return true;
}

时间复杂度O(n)

但事实上不需要如此,因为约数是成对出现的,如果存在 p ⋅ q = n , p ≤ n p \cdot q=n,p\leq \sqrt n pq=n,pn ,则必然有 q ≥ n q\geq\sqrt n qn ,所以我们只需要枚举到 n \sqrt n n 即可:
在这里插入图片描述
时间复杂度O( n \sqrt n n )

唯一分解定理(算数基本定理)

质数的唯一一个质因子是它本身。
显然每一个合数都可以被拆分称其质因子乘积的形式。
因此每正整数都可以被拆分成若干质因子乘积的形式。

事实上,唯一分解定理(算数基本定理)表明,每一个正整数可以被唯一地分解成它的质因子的乘积。
我们说1可以被分解成1.

n的质因子分解可以表示为,设n的不同质因子分别为p1,p2…,…,含有这些质因子的次数分别为a1,a2,…:
n = ∏ i = 1 s p i a i          ( p i − 1 < p i ) n=\prod_{i=1}^sp_i^{a_i}\;\;\;\;(p_{i-1}<p_i) n=i=1spiai(pi1<pi)
∏ \prod 表示连乘积,这种形式被称为n的标准分解式。

唯一分解定理可以证明一下:
假设存在两种分解形式,使得 n = ∏ i = 1 l p i a i ( p i − 1 < p i ) = ∏ i = 1 r q i b i ( q i − 1 < q i ) n=\prod_{i=1}^lp_i^{a_i}(p_{i-1}<p_i)=\prod_{i=1}^rq_i^{b_i}(q_{i-1}<q_i) n=i=1lpiai(pi1<pi)=i=1rqibi(qi1<qi)

假设n是不满足唯一分解定理的最小的正整数。因为 p 1 ∣ n p_1|n p1n,所以 p 1 ∣ ∏ i = 1 r q i b i p_1|\prod_{i=1}^rq_i^{b_i} p1i=1rqibi
那么我们把左右两边同时除掉p1
∏ i = 1 l p i a i p 1 = ∏ i = 1 r q i b i p 1 \frac{\prod_{i=1}^lp_i^{a_i}}{p_1}=\frac{\prod_{i=1}^rq_i^{b_i}}{p_1} p1i=1lpiai=p1i=1rqibi,由于整除,这必定是正整数。
我们就发现了一个更小的不符合唯一分解定理的数。这与我们假设n的最小性矛盾。

QED.

分解质因数

那么我们可以对n分解质因数。
很显然,事实上n最多只含有一个> n \sqrt n n 的质因子。
因此我们可以把n所有<= n \sqrt n n 的质因子全都除掉,剩下的那一个数就是n的大于 n \sqrt n n 的质因子。(如果剩下一个1,则n没有大于 n \sqrt n n 的质因子):
在这里插入图片描述
a[i]表示n的标准分解式中,p[i]的指数。

时间复杂度O( n \sqrt n n )

后记

于是皆大欢喜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值