近几天看了有关约数质数同余欧几里得扩展欧几里得,感觉信息量有点大。
质数就是一个数的因子只有1和它本身。判断质数的方法试除法1~sqrt(n)找因子就行,然后就是介绍了两个打表的方法一个埃式筛法,质数的倍数都不是质数然后二重循环就一遍遍地排除。(这个之前学长讲过这个方法素数打表也是一直用的这个方法)。另一个是线性筛,利用每个合数的最小质因子来保证每个数都被筛一次。质因数分解,分解的时候i从2开始一步步的把所有能整除n的i全部给他去了这样保证每次只要i能整除n那么这个i就肯定是质数因为前面小的数都已经被除去了。
约数,n的约数就是能把n整除的数。求法i从1~sqrt(n)找n能整除i那么n/i也能整除n。然后利用倍数打表思想类似埃式筛法。最大公约数最小公倍数,最大公约数辗转相除法更相减损术
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
gcd(a,b)=gcd(b,a-b)=gcd(a,a-b);
gcd(2a,2b)=2*gcd(a,b);
lcm(a,b)=a/gcd(a,b)*b;//这样可以防止溢出
gcd(a,b)=1 a,b互质,欧拉函数φ(n)(1~n中与n互质的数的个数)证明用的容斥原理把它转化成集合的∩就比较形象了两个集合交在一起多加了一次减掉,三个集合两两交在一起两两交的多加一次剪掉在减的时候三个集合交叉处多减了再加上(emmm大致就是这个意思吧)
扩展欧几里得的证明看着还能理解ax+by=gcd(a,b)这个式子一定有解 然后同构欧几里得算法把式子化简就得到另一个 bezot的方程而且系数之间的关系是固定的之后只需要递归的求解到边界b=0的情况就可以了
欧拉定理和费马小定理这块的证明还有点迷糊用的话应该还是没问题的吧(●'◡'●)。然后就是逆元用费马小定理和扩展欧几里得求 费马小定理直接快速幂就行,扩展欧几里得把b换成要MOD的数a和MOD是互质的gcd=1带到扩展欧里得里正好是逆元得式子解x就行。
emmm板子也得要熟悉,嗯!