关于数论的知识——基于程序设计
1.整除:
表示方法:d|a -> a=k*d
特别的:若11能整出a的偶数位和奇数位之差,则 11|a
2.gcd:
关于算法实现来源:a=b*k+r -> gcd(a,b)=gcd(b,r)根据这一规则可以实现求最大公约数的递归算法
3.同余:
有10条规律,可翻阅书籍 P4
4.中国剩余定理:
x≡a(mod 3);
x≡b(mod 5);
x≡c(mod 7);
则x的通解为:x=x0+abc*k(k为一整数,x0为其中一个解)
5.素数:
(1)求n以内的素数:可以用数组维护一个素数表,只需要从2~sqrt(n)之间的判断完毕,就可以构成一个完整的素数表
(2)判定一个数是否为素数:比较小的数直接用sqrt 方法,达到一定规模的大数用概率测试法:
米勒罗宾算法是一个相当著名的判断是否是素数的算法,能够很大概率的判断一个数是否是素数(接近100%,在一定范围内能达到100%)。
在工程方面被广泛应用。
米勒罗宾算法的核心是课上提到的费马小定理:
即如果一个数n 它的 a^(n-1)%n !=1 (0<a<n) 则它一定是合数。
如果 a^(n-1)%n ==1 (0<a<n) 则它可能是合数可能是素数。概率算法的概率就在这个 a上体现。
/*
1 随机取一个 a
2 如果 它不满足 a^(n-1)%n ==1
3 则它一定是 合数
4 退出
5 如果它满足 a^(n-1)%n ==1
6 则它是一个素数的概率是1/2
7 回到 1
*/
6.关于K尾相等数: 当一个数不停地进行N次幂的时候,在两次出现尾数相同的间隔内,不会在其中会有另两个尾数相同。
转载于:https://blog.51cto.com/treap/1080475