数论2约数的求法以及GCD和LCM

约数

1.定义:若整数n除以d的余数为0,即d能整除n,则称d为n的约数,n是d的倍数,记为d|n。

算数基本定理的推论:

任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1 * P2^a2 * P3^a3…* Pn ^an,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数.

那么正约数的个数为(a1+1) * (a2+1) … (an+1)
所有正约数的和为:(1+p1+p1^ 2+…+ p1^c1)* … *(1+pn+pn^ 2+…+ pn^cn)

求一个数的约数的集合:
1.试除法,时间复杂度为O(n根号n),由于太过简单便不多加赘述
2.倍数法:反过来考虑,某个数d,其中以d为约数的数即为d的倍数,这样时间复杂度是O(n
logn),方法有点类似筛法

二.最大公约数(GCD)以及最小公倍数(LCM)
关于定义也不多加赘述
有这样一个性质:两个数的乘积等于其最大公约数乘最小公倍数

关于最大公约数的求法,最为常用的便是欧几里得算法,即对于任意两个整数a,b,如果b不为0,那么gcd(a,b)=gcd(b,a mod b)
证明:1.如果 a<b,那么gcd(b,a mod b)=gcd(b,a)恒成立
2.如果a>=b,那不妨设a=qb+r,其中 0<=r<b,则r=a mod b,那么对于任何a与b的公约数d,有d|a,d|(qb),故d|(a-q*b)即d|r,因此d也是b和r的约数,因此对于所有约数,都满足该性质,故它们的最大公约数也相同
时间复杂度为O(log(a+b))
这里给出模板:

 int gcd(int a,int b)
 {
      return b?gcd(b,a%b):a;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值