数论基础 (费马小定理/扩展欧几里得/欧拉函数)

来源:互联网 发布:钱盾是什么软件 编辑:程序博客网 时间:2024/05/17 03:57

逆元:

a*x  == 1(mod m)

x是相对于m的a的逆元

a是相对于m的x的逆元


拓展欧几里得:


(证明过程参考自百度百科)

原式: ax+by=gcd(a,b)(假设ab)

  • 当b=0时有gcd(a,b)=a,此时x=1,y=0

  • 当b不为0时,根据欧几里得定理gcd(a,b)=gcd(b,amodb)可得ax+by=gcd(a,b)=gcd(b,amodb)=bx+(amodb)y,即 

    ax+by=bx+(amodb)y=bx+(aba/b)y

    移项得 
    ax+by=bx+(amodb)y=ay+b(xa/by)

    根据恒等定理,有 
    {x=yy=xa/by

    这有什么用呢?xy还是不知道呀. 
    重新来看看我们得到的两个等式.x和y是gcd(a,b)=ax+by的解,而x’和y’是在对gcd(a,b)按欧几里德算法进行一步后的结果对应的贝祖等式gcd(b,amodb)=bx+(amodb)y的解.也就是说,gcd(a,b)对应的贝祖等式的解x,y可以由gcd(b,amodb)对应等式的解x’,y’计算得出 
    由于欧几里德算法最后一步为gcd(d,0)=d,此时对应的等式的解为x=1,y=0,因此只要如上述代码,从gcd(d,0)往前处理,在进行欧几里德算法的递归的时候根据相邻两次调用间x,y和x’,y’的关系计算即可求出ax+by=gcd(a,b)的解.

更进一步,对于任意不定式ax+by=c,只需要在等式ax+by=gcd(a,b)=d两边乘上c/d即可得到解为x=xc/d,y=yc/d

如何得到所有解? 
实际上在之前的计算和证明中我们得到的只是不定方程的一组解,那么怎样得到所有解呢?对于一般形式ax+by=c有通解x=p+kb,y=qka(k).(证明略,只要代入一下就知道为什么通解是这个了)



int extend_GCD(int a,int b,int &x,int &y){    int tmp,d;    if(b==0){        x=1;        y=0;        return a;    }    int res=extend_GCD(b,a%b,x,y);    tmp = x;    x = y;    y = tmp - (a/b)*y;    return res;}
void Extend_Gcd(int a,int b,int &n,int &x,int &y){    if(!b){        n=a,x=1,y=0;        printf("1:%d %d\n",x,y);    }else{        Extend_Gcd(b,a%b,n,y,x);        y-=x*(a/b);        printf("---%d %d\n",x,y);    }}


费马小定理:


p与m互质:


gcd(p, m) == 1


p*(p^(m-1)) == 1(mod m);


快速幂求解即可


欧拉函数:

积性函数:对于任意互质的整数ab有性质f(ab)=f(a)f(b)的数论函数。

完全积性函数:对于任意整数ab有性质f(ab)=f(a)f(b)的数论函数。

欧拉函数定义

φ(n) : 比n小的与n互质的数的个数 (φ(1) = 1

欧拉函数性质:

性质一

对于一个质数n,φ(n)=n−1 
证明: 
因为n是质数。

性质二

n=pk,则φ(n)=pkpk−1=(p−1)pk−1 
证明: 
因为除了p的倍数外,其他数都跟n互质。

性质三

gcd(n,m)=1时,φ(nm)=φ(n)∗φ(m) 
证明: 
φ(n)是积性函数。

性质四

n=pk11pk22...∗pkmm,则φ(n)=n∗(1−1p1)∗(1−1p2)∗...(1−1pm) 
证明: 
根据性质二 

φ(n)=(pi−1)pki−1i(pi|n)=n(1−1p1)(接把n提出来)


当然也可以用容斥的想法去理解。

性质五

欧拉定理:对于互质的整数a,maφ(m)≡1(modm) 
证明: 
这小于n且与n互质的集合时Z,显然|Z|=φ(n)Z={p1,p2...pφ(n)}。 
令集合S={ap1modn,ap2modn...apφ(n)modn}。 
因为: 
     1. 因为an互质,pin互质,所以apin互质,所以ap1modnZ

     2. 若ij,那么apimodnapjmodn 
     反证: 
          假如apimodn=apjmodn ,设api=kin+b 
          那么 

api=kin+b=apj=kjn+ba∗(pipj)=n∗(kikj)


          因为a与n互质,即n|(pipj),不成立。 
所以S=Z 
由此我们可以列出等式: 

ap1ap2...∗apφ(n)aφ(n)p1p2...pφ(n)(modn)≡1(modn)

延伸: 
费马定理:如果正整数a与p互质,则ap−1≡1(modp) 
证明:由性质一可得φ(p)=p−1,代入欧拉定理即可

性质六

设小于n的所有与n互质的数的和为SumSum=nφ(n)2 
证明: 
     首先证明一个结论:如果gcdn,i=1gcdn,ni=1 
     反证法:如果存在k≠1使gcdn,ni=k,那么 
     (ni)modk=0nmodk=0 
     可得imodk=0,即gcdn,i=k,也就是说如果gcdn,i=1,那么gcdn,ni)就不能大于1

那么就可以得知与n互质的数都是成对存在的,并且和为n,那么就可以得出Sum=nφ(n)2的公式。

性质七

首先p是个质数。如果imodp=0,那么φ(ip)=pφ(i)(结论一),否则φ(ip)=φ(i)∗(p−1)(结论二)。 
证明: 
对于第一个结论我们只需证明gcd(n,m)=1可以得出gcd(n,m+n)=1即可。 
     反证法:假设gcd(n,m+n)=b(b≠1)。设n+m=k1b,m=k2b 

k2b+n=k1bn=(k1k2)b


     所以gcd(n,m)至少等于b 
     得证。

对于第二个结论,我们可知由于gcd(i,p)=1φ(ip)=φ(p)∗φ(i),并且φ(p)=p−1(性质一,性质三),得证。

性质八

直接给式子吧… 
n=d|nφ(d) 
根据上面那条式子可以继续推点显而易见的东西 

i=1ni=i=1nd|iφ(d)=d=1nφ(d)∗⌊nd


反演一下,φ(n)=d|nμ(d)∗nd

欧拉函数应用:

线筛φ函数:

应用1:

phi(p) == p-1 因为素数p除了1以外的因子只有p,所以与p 互素的个数是p - 1

 

应用2

phi(p^k) == p^k - p^(k-1) == (p-1) * p^(k-1)

证明:

n == p^k,小于 n 的正整数共有 p^k-1 ,其中与p 不互素的个数共p^(k-1)-1 个,它们是1*p,2*p,3*p ... (p^(k-1)-1)*p

所以phi(p^k) == (p^k-1) - (p^(k-1)-1) == p^k - p^(k-1) == (p-1) * p^(k-1)

 

应用3

如果i mod p == 0, 那么 phi(i * p) == p * phi(i)

[1,i ]中与i不互质的数是i-phi(i)个,[1,i*p]中是i*p-p*phi(i)个,

ii*p没有不同的因数,顾[1,i*p]中与i*p不互质的也是i*p-p*phi(i)个,

举个例子:

假设 p = 3,i = 6,p * i = 18 = 2 * 3^2;

phi(3 * 6) == 18*(1-1/2)*(1-1/3) = 6

p * phi(i) = 3 * phi(6) = 3 * 6 * (1-1/2) *  (1-1/3) = 6 = phi(i * p) 正确

 

应用4

如果i mod p != 0, 那么 phi(i * p) == phi(i) * (p-1)

证明:

i mod p 不为0p为质数,所以ip互质,那么根据积性函数的性质 phi(i * p) == phi(i) * phi(p)其中phi(p) == p-1

所以 phi(i * p) == phi(i) * (p-1).

再举个例子:

假设i = 4, p = 3, i * p = 3 * 4 = 12

phi(12) = 12 * (1-1/2) * (1-1/3) = 4

phi(i) * (p-1) = phi(4) * (3-1) = 4 * (1-1/2) * 2 = 4 = phi(i * p)正确


阅读全文
0 0
原创粉丝点击