数论 欧几里德相关 模板
2016-08-10 23:56
363 查看
//非递归的gcd
int_t gcd(int_t a,int_t b){
while( b ){
int_t r = b;
b = a % b;
a = r;
}
return a;
}
//快速GCD
int Fastgcd(int a, int b)
{
if (a == 0) return b;
if (b == 0) return a;
if (!(a & 1) && !(b & 1))
return Fastgcd(a>>1, b>>1)<<1;
else if (!(b & 1))
return Fastgcd(a, b>>1);
else if (!(a & 1)) return Fastgcd(a>>1, b);
else return Fastgcd(abs(a - b), min(a, b));
}
//非递归的扩展欧几里德算法
//返回a、b的gcd,同时x、y满足ax+by=gcd
int_t exEuclid(int_t a,int_t b,int_t&x,int_t&y){
int_t x0 = 1, y0 = 0;
int_t x1 = 0, y1 = 1;
x = 0; y = 1;
int_t r = a % b;
int_t q = ( a - r ) / b;
while( r ){
x = x0 - q * x1;
y = y0 - q * y1;
x0 = x1; y0 = y1;
x1 = x; y1 = y;
a = b; b = r; r = a % b;
q = ( a - r ) / b;
}
return b;
}
int_t gcd(int_t a,int_t b){
while( b ){
int_t r = b;
b = a % b;
a = r;
}
return a;
}
//快速GCD
int Fastgcd(int a, int b)
{
if (a == 0) return b;
if (b == 0) return a;
if (!(a & 1) && !(b & 1))
return Fastgcd(a>>1, b>>1)<<1;
else if (!(b & 1))
return Fastgcd(a, b>>1);
else if (!(a & 1)) return Fastgcd(a>>1, b);
else return Fastgcd(abs(a - b), min(a, b));
}
//利用二进制计算a*b%mod llt multiMod(llt a,llt b,llt mod){ llt ret = 0LL; a %= mod; while( b ){ if ( b & 1LL ) ret = ( ret + a ) % mod, --b; b >>= 1LL; a = ( a + a ) % mod; } return ret; } //计算a^b%mod llt powerMod(llt a,llt b,llt mod){ llt ret = 1LL; a %= mod; while( b ){ if ( b & 1LL ) ret = multiMod(ret,a,mod),--b; b >>= 1LL; a = multiMod(a,a,mod); } return ret; }
//非递归的扩展欧几里德算法
//返回a、b的gcd,同时x、y满足ax+by=gcd
int_t exEuclid(int_t a,int_t b,int_t&x,int_t&y){
int_t x0 = 1, y0 = 0;
int_t x1 = 0, y1 = 1;
x = 0; y = 1;
int_t r = a % b;
int_t q = ( a - r ) / b;
while( r ){
x = x0 - q * x1;
y = y0 - q * y1;
x0 = x1; y0 = y1;
x1 = x; y1 = y;
a = b; b = r; r = a % b;
q = ( a - r ) / b;
}
return b;
}
//求a相对于p的逆元,a、p互质才存在逆元 int_t inv(int_t a,int_t p){ int_t x,y; int_t r = exEuclid(a,p,x,y); if ( r != 1 ) return 0; x = x % p; if ( x < 0 ) x += p; return x; }
相关文章推荐
- 模板整理:数论---组合数/欧几里得/孙子定理/费马小定理/欧拉定理及相关
- 数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)
- 一些数论的模板及相关结论
- 解题报告 :POJ1061 青蛙的约会 数论/扩展欧几里德模板题
- 7C Line 【扩展欧几里德】数论模板
- 数论二1010大整数的质因子分解(此题模板得记)
- 模板之数论
- 数论相关知识及其算法(上)
- 数论相关
- 性能测试用例模板及相关
- UltraWebGrid模板列及行的相关操作
- 后缀数组 相关问题模板
- 流程管理模板规范及相关表单
- hdu 2685(数论相关定理+欧几里德定理+快速取模)
- 扩展欧几里德,求逆元模板
- 模板,扩展,离散对数,数论
- 模板匹配中差值的平方和(SSD)与互相关准则的关系
- hdu 1576 A/B || hdu 2669 Romantic (数论--欧几里德)
- 【模板】【笔记】数论各种姿势等等
- 数论专题小结:取模运算模板