码迷,mamicode.com
首页 > 其他好文 > 详细

数学-剩余系

时间:2015-03-21 18:26:26      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

欧几里得算法与扩展欧几里得算法

递归写法

gcd

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

扩欧

struct value{ int x,y; value(int x,int y):x(x),y(y){} };
value ExtEuclid(int a,int b)
{
    if(a==0) return value(0,1);
    value r=ExtEuclid(b%a,a);
    return value(r.y-b/a*r.x,r.x);
}

 

 

非递归写法

gcd

int gcd(int a,int b)
{ while(a) b=b%a,swap(a,b); return b; }

扩欧的不会.....

 

 

求剩余系中某数的乘法逆元

考虑剩余系下的除法,a/b=ab-1(mod MOD) ,有a-1a=1(mod MOD),这个算法求出a-1 ........

注意只有模数为质数时,整个剩余系的除零以外其它元素才都会有逆元.

int getrev(int p)
{ return p==0 ? -1 : (ExtEuclid(p,MOD).x%MOD+MOD)%MOD; }

具体的,要求 ax≡1(mod MOD) ,有 ax+MODy=1. 如果a与MOD的gcd不为1,则逆元不存在.

直接用扩欧来算(x,y)就行了......

 

未完待续

中国剩余定理

模意义下的高斯消元

 

求原根

 

数学-剩余系

标签:

原文地址:http://www.cnblogs.com/DragoonKiller/p/4355855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!