数论基础讲解

数论,顾名思义,是对整数进行研究的理论。是数学学科的一个重要分支,也是ACM竞赛题型中饶有趣味的一个部分。

  数论,有人戏称为“素论”。可见对于素数的研究在数论中比重之大。当然,也有不是对素数操作的算法,在这里我们也将其划归为数论。

 

 

1、整除

 1.1. 定义:

  若a%b==0,则称a能被b整除或b能整除a,记作b | a.

 1.2. 整除的性质:

  (1)0可以被任何非0数整除
  (2)若b | a,则b |  a
  (3)传递性:a | b && b | c <=> a | c.
  (4)如果a、b都能被c整除,那么(a+b)或(a-b)也可以被c整除
  (5)几个数相乘,如果其中有一个因数能被某一个整除相除,那么它们的积也能被这   个数整除。
 
 还有几个略实用的性质:
  (1)能被2整除的数,个位上的数都能被2整除
  (2)能被4整除的数,个位和十位所组成的两位数能被4整除
  (3)能被8整除的数,百位、十位和个位所组成的三位数能被8整除
  (4)能被5整除的数,末尾是0或5
  (5)能被25整除的数,十位和个位所组成的两位数能被25整除
  (6)能被125整除的数,百位、十位和个位所组成的三位数能被125整除
  (7)能被3整除的数,各个数位上的数字之和能被3整除
  (8)能被9整除的数,各个数位上的数字和能被 9 整除
  (9)如果一个数既能被 2 整除又能被 3 整除,那么这个数能被 6 整除
  (10)如果一个数既能被 2 整除又能被 5 整除,那么这个数能被 10 整除(即个位为
    0)
  (11)能被 11 整除的数,奇数位(从左往右数)上的数字和与偶数位上的数字和的差
   (大数减小数)能被 11 整除

 

2、最大公约数&&最小公倍数

 2.1.GCD

  2.1.1.方法:

   两数各自分解质因数,然后取出相同项相乘。

   欧几里得算法(辗转相除法)
 
    设a = qb + r,其中a,b,q,r都是整数,则:

gcd( a , b )   =   gcd( b , r )

    即

   gcd( a , b )   =   gcd( b , a%b)

 

 2.2.LCM

 2.3.小数的GCD

  eps控制精度,fmod是C++的库函数,运算浮点数的mod运算。

 2.4.扩展欧几里得

  2.4.1.描述

   设a和b不全为0,整数x、y,使得:

d =  ————————–>  贝祖等式

   扩展欧几里得算法根据已知的a和b,求解出一组x和y(解一定存在),并且求出d  值。

  2.4.2.算法

    理解了求解gcd的欧几里得算法,扩展欧几里得算法就好理解了,相比于欧几里   得算法,扩展gcd只是在欧几里得算法中多了一个求解x和y的步骤。

  2.4.3.作用   (此部分在后续会详细讲解)

   (1)求解不定方程:

     所谓不定方程,即未知数的个数多于方程个数,且未知数受到某些限制(如

    要求是有理数、整数或正整数等等)的方程或方程组。

     如,方程只有一个,但是解却可以有多个。

     求解不定方程的一组解,或者判断不定方程是否有解,扩展欧几里得就可以

    派上用场了。

   (2)求解模线性方程(线性同余方程):

     求解,未知数x的最小解。

   (3)求解模的逆元:

     同余方程ax≡b (mod n),如果 gcd(a,n)== 1,则方程只有唯一解。

     在这种情况下,如果 b== 1,同余方程就是 ax=1 (mod n ),gcd(a,n)= 1。

     这时称求出的 x 为 a 的对模 n 乘法的逆元。

     PS:关于逆元,有一个蛮有用的性质。

     设p为素数,,这样就可以将除法处理为乘法

 

3、素数

 3.1.定义

  素数是大于1的正整数,并且除了1和其本身不能被其他的正整数整除。

  非素数称为合数。

 3.2.素数的 eratosthenes 筛法

   筛法是数论中一个比较重要的算法,在O(sqrt(N))的时间内获得N以内所有的素   数。

   所谓筛法,就是每次筛去一部分数。如图,起始所有的数都标记为素数,遇到2   时,将所有2的倍数标记为合数,以此类推下去,剩下的都是素数了。

   该算法适用于较小的MAXN,对于较大的MAXN,内存无法开如此大的空间。

 3.3.区间素数

  获得[L , U]区间的素数,L和U很大,但是U-L不是很大。

  首先线性筛出1到之间所有的素数(2147483647是啥?自个儿猜去  ~),然后再通过已经晒好素数筛出给定区间的素数。

  算是模板吧,此处不贴代码~

 3.4.素数判定

  3.4.1.试除法

   就是大家都会的简单算法,用小于该数的所有素数去试除,若都无法整除,则为  素数,复杂度O(sqrt(N)).

 3.4.2.Miller-Robin随机素性测试

   关于Miller-Robin算法,可以另劈一章进行讲解,因而此处只做简略介绍。

   Miller-Rober 带有随机性,可能测出伪素数,概率为,一般 s 为 20 左右,

   因而失误概率很低,适用于大数素性判断。

   关于Miller-Robin的时间复杂度,最坏为。Miller- Rabin算法的  性能是很好的。在实际应用中,Miller-Rabin的实际执行速度也很快。

 3.5.唯一分解理论

  简单却很有用的一个理论

  自然数N皆可以表示为素数之积

           

    比如:

  由此可见,自然数的基本单位是素数。

  唯一分解理论的用处很广,简直说不过来,在数论题目中平凡出现,一般与素数挂 钩的数论题,十有八九会用到这个理论。

  例如:

   (1) N的约数个数,为(x1+1)*(x2+1)*……*(xm+1)

   (2)设                     

   则

 3.6.分解质因子

  3.6.1.普通的分解质因数

   对n进行分解质因子,将分解的因子存入数组facs中,长度为cnt。

   先找一个最小的质数k;

   若该质数等于n,则分解质因子的过程已经结束;

   若n>k,且k|n,则记录k,n/=k,然后继续寻找;

   若n不能被k整除,k+=2,继续寻找。

  3.6.2.Pollard_rho 因数分解

   适用于大数的分解质因子,返回的质因子无序。

 3.7.素数的扩充知识

   3.7.1.梅森素数

     形如的一类数,p为素数,称为梅森数。若梅森数是素数,则称为梅    森素数,记作Mp。

     例如当p=2、3、5、7时,Mp为素数,其实能使Mp称为素数的p少之又少。是    否有无穷多个梅森素数是数论中未解决的难题之一。

   3.7.2.高斯素数

     高斯素数是不能表现为1、i或本身除外的两个复整数的乘积的复整数。
     
     高斯素数是素数在复数范围内的拓展。

     (1+2i)是高斯素数,5+sqrt(-2)不是高斯素数,因为

        5+sqrt(-2)=(1-sqrt(-2))*(1+2sqrt(-2))

     有的数在实数范围内是素数,但是在素数范围内不是素数,例如

13 = ( 3 – 2i ) * ( 3 + 2i )

     关于高斯素数的判定,a+bi是素数当且仅当

      (1)a、b中有一个是0,另一个是形为4n+3或-(4n+3)的素数

      (2)a、b均不为0,为素数

     关于此定理的证明,需要了解费马平方和定理,即奇质数能表示为两个平方

    数之和的充分必要条件是该素数被4除余1。证明大家自行学习,此处不再赘
   
    述。

 

4、欧拉函数

 4.1.定义

  对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目,记作

  例如,因为1、3、5、7均和8互质。

 4.2.通式

  ,Pi是x的所有质因子,x!=0

  φ(1)=1(唯一和 1 互质的数就是 1 本身)

  求 φ(x)的时候,先将式子转化一下,以避免用 double:

1-1 / pn =(pn-1)/ pn

 

 4.3.性质

  欧拉函数式积性函数,即满足

 4.4.指数循环节问题

  对于,我们可以用快速幂轻松解决,但是对于

,快速幂就显得苍白无力了,因为幂实在太大,对此我

们就需要对其进行降幂处理,有如下公式

这样,幂数降下来了,就可以妥妥的用快速幂求解了。

关于此公式的证明,参见http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9

指数循环节,可以解决迭代幂的问题,所谓迭代幂,就是求解

利用递归就出最上层的幂所需要模的欧拉函数,然后在回溯的过程中运用降幂公式求

解。

 

5、中国剩余定理

 5.1.引入

  有题曰:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几 何?

  化简一下:简化一下:已知 x%3=2, x%5=3, x%7=2, 求 x

  根据题意:

x≡r1(mod 3)

x≡r2(mod 5)

x≡r3(mod 7)

  另一方面

70=(5×7)x2≡1(mod 3)、70≡0(mod 5)及70≡0(mod 7)

21=(3×7)x1≡1(mod 5)、21≡0(mod 3)及21≡0(mod 7)

15=(3×5)x1≡1(mod 7)、15≡0(mod 3)及15≡0(mod 5)

  由同余的特性,有

70r1≡r1(mod 3)、70r1≡0(mod 5)及70r1≡0(mod 7)

21r2≡0(mod 3)、 21r2≡r2(mod 5)及21r2≡0(mod 7)

15r3≡0(mod 3)、 15r3≡0(mod 5)及15r3≡r3(mod 7)

  因此

70r1+21r2+15r3≡r1(mod 3)

70r1+21r2+15r3≡r2(mod 5)

70r1+21r2+15r3≡r3(mod 7)

  所以

x≡70r1+21r2+15r3+3m

x≡70r1+21r2+15r3+5n

x≡70r1+21r2+15r3+7p

   最后,得到结果,x≡(70r1+21r2+15r3)(mod 105),而105正便是3,5,7的最小公  偣数。所以其实在很多数字可以满足这几个余数条件的,要找到最小值才要减105。

 5.2.中国剩余定理

  问题简单来说就是 a = ai (mod ni) 求未知数 a。

  中国余数定理:

    设 n=n1*n2…nk, 其中因子两两互质.有: a—–(a1,a2,…,ak),

    其中 ai = a mod ni, 则 a和(a1,a2,…,ak)关系是一一对应的.就是说可以由 a 求出

    (a1,a2,…,ak), 也可以由(a1,a2,…,ak)求出 a

  推论 1:

   对于 a=ai (mod ni) 的同余方程,有唯一解

   下面说说由(a1, a2, …, ak)求 a 的方法:

   定义 mi = n1*n2*…nk / ni; ci = mi(mf mod ni); 其中 mi*mf mod ni = 1;

   则 a = (a1*c1+a2*c2+…+ak*ck) (mod n) (注:由此等式可求a%n, 当 n 很大时)

   中国剩余定理关键是 mf 的求法,如果理解了扩展欧几里得 ax+by=d, 就可以想到:

              mi*mf mod ni = 1 => mi*mf+ni*y=1;

 5.3.非互质的中国剩余定理(中国剩余定理的一般情况)

  采用两两合并的思想:

X ≡ r1 ( mod a1 )

X ≡ r2 ( mod a2 )

  推得:

X = k1 * a1 + r1

X = k2 * a2 + r2

  所以:

k1 * a1 + r1 = k2 * a2 + r2

  推得:

k1 * a1 ≡ ( r2 – r1 ) ( mod a2 )

  解模线性方程求得最小的 k1

  然后得到:

X = k1 * a1 + r1

  令:

r = x 、a = lcm ( a1 , a2 )

  然后就可以组成另一个式子:

X ≡ r ( mod a )

  将这个式子与下一个式子继续像上述一样合并,一直到最后一个并完,r 就是答案。

 

你可能感兴趣的:(----数论)