今天主要温习了数论的常用结论,列在下面供参考,今后将继续补充。
唯一分解定理
算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1P2a2P3a3……Pnan。
百度传送门:
http://baike.baidu.com/link?url=Dot_lMUdZmRC2-THg_s6al1fwtIt9A_t_Q_WODgkywCguHZVv50Qr-OWl_y65BGop6MThpXFEt8YXgGvXmD8ta
GCD辗转相除法
两正整数a,b的最大公约数gcd按照如下法则计算:
1. 能除尽,b为最大公约数;
2. 否则用除数除以余数,递归求解。
下面给出三种实现方式,
int gcd(int a,int b){ //按照思路写
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
int gcd1(int a,int b){ //b看做除数,简洁版
return a%b==0?b:gcd(b,a%b);
}
int gcd2(int a,int b){ //b看做余数
return b==0?a:gcd(b,a%b);
}
拓展结论:
1. 设两个数是a,b最大公约数是p,最小公倍数是q那么有这样的关系:ab=pq;
2. 从左到右一次求最小公倍数,对后来加的新数,让其与之前的所有的数的最小公倍数一起求两者的最小公倍数,直到算到最后一个数。
原理证明:
lcm(a,b) = a*b/gcd(a,b)
gcd(a,b,c) = gcd(gcd(a,b),c)// 这点很简单
…
推广:
gcd(a,b…n) = gcd(gcd(…gcd(a,b),….n)
lcm(a,b…n) = lcm(lcm(…lcm(a,b),…n)
被除数扩大几倍,除数不变,余数也扩大几倍。
被除数加上(或减去)除数的倍数,除数不变,余数也不变。