闵神的数论

来源:互联网 发布:好伙伴物流软件 编辑:程序博客网 时间:2024/05/06 23:50

数论

推荐一篇关于逆元的blog
里面也有大部分今天讲的知识>-<

http://www.cnblogs.com/linyujun/p/5194184.html

    • 数论
    • 模运算
    • 欧几里德算法求最大公约数

1. 模运算

除法定理
x=a*p+b,y=c*p+d;
x%p=b,y%p=d;

加减乘
x±y=(a±b)p+(c±d),设c±d=e*p+f,那么
x±y=(a±b+e)p+f,所以(x±y)%p=(c±d)%p=((x%p)±(y%p))%p

x*y=(a*c)*p^2+(b*c+a*d)*p+(c*d),设c*d=e*p+f
那么xy=(a*c*p+b*c+a*d+e)p+f,(xy)%p=(cd)%p=((x%p)(y%p)%p)

然而除法。。。
暴力除法不可取,因为除法不满足同余性质。
举个栗子;
8%7=1,2%7=2,(8/2)%7=4
((8%7)/(2%7))%7=excuse me?
减法和除法本质上是对加法和乘法的逆元做运算

听不懂的玄学逆元

http://www.cnblogs.com/linyujun/p/5194184.html

2. 欧几里德算法求最大公约数。

xa+yb=d=gcd(a,b)=gcd(b,a)=gcd(a,b-a);
因为b不断减a,直到小于a,相当于是b%a;
gcd(a,b)=gcd(a,b%a);

一行gcd
int gcd(int a,int b) {return !b? a:gcd(b,a%b);}

gcd(a,b)时间复杂度(loga+logb)[最坏情况取在斐波那契数列两个相邻数上]
扩展欧几里德

欧拉定理
若x与p互余