关于数论的知识——基于程序设计

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次幂的时候,在两次出现尾数相同的间隔内,不会在其中会有另两个尾数相同。