ACM数论之旅4---扩展欧几里德算法(欧几里德(???)?是谁?)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM数论之旅4---扩展欧几里德算法(欧几里德(???)?是谁?)相关的知识,希望对你有一定的参考价值。

为什么老是碰上

扩展欧几里德算法

( •?∀•? )最讨厌数论了

看来是时候学一学了

 

度娘百科说:

首先, ax+by = gcd(a, b) 这个公式肯定有解 (( •?∀•? )她说根据数论中的相关定理可以证明,反正我信了)

所以 ax+by = gcd(a, b) * k 也肯定有解 (废话,把x和y乘k倍就好了)

 

那么已知 a,b 求 一组解 x,y 满足 ax+by = gcd(a, b) 这个公式

 

 1 #include<cstdio>
 2 typedef long long LL;
 3 void extend_Eulid(LL a, LL b, LL &x, LL &y, LL &d){
 4     if (!b) {d = a, x = 1, y = 0;}
 5     else{
 6         extend_Eulid(b, a % b, y, x, d);
 7         y -= x * (a / b);
 8     }
 9 }
10 int main(){
11     LL a, b, d, x, y;
12     while(~scanf("%lld%lld", &a, &b)){
13         extend_Eulid(a, b, x, y, d);
14         printf("%lld*a + %lld*b = %lld\n", x, y, d);
15     }
16 }

 

 

有些人喜欢极度简化,这是病,得治(,,• ? •,,)比如在下

1 void ex_gcd(LL a, LL b, LL &d, LL &x, LL &y){
2     if(!b){d = a; x = 1; y = 0;}
3     else{ex_gcd(b, a%b, d, y, x); y -= x*(a/b);}
4 } 

 

连名字都简化了。。。

 

 

 

( •?∀•? )解完了

睡觉~~~

 

以上是关于ACM数论之旅4---扩展欧几里德算法(欧几里德(???)?是谁?)的主要内容,如果未能解决你的问题,请参考以下文章

数论——扩展的欧几里德算法 - HDU2669

数论扩展欧几里得算法

《夜深人静写算法》数论篇 - (10) 扩展欧几里得定理

数论初步——扩展欧几里得算法

数论杂谈——欧几里得算法及扩展欧几里得

POJ2142 The Balance 数论(扩展欧几里得算法)