1. 程式人生 > >歐幾裏得,擴展歐幾裏得(模板)

歐幾裏得,擴展歐幾裏得(模板)

blank space string ref 返回 color quest ostream include

 1 int gcd(int a,int b)
 2 {
 3     return b?gcd(b,a%b):a;//最後返回的a為最大公約數
 4 }

擴展歐幾裏得求逆元:51nod1256

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 int d,x,y;
 6 //ax+by=1(x為a的逆元,同理y為b的逆元) 
 7 void Exgcd(int a,int b,int &x,int &y)
8 { 9 if(!b) {d=a; x=1; y=0;} 10 else 11 { 12 Exgcd(b,a%b,x,y); 13 int tmp=x; 14 x=y; 15 y=tmp-(a/b)*y; 16 } 17 } 18 int main() 19 { 20 int a,b; 21 cin>>a>>b; 22 23 Exgcd(a,b,x,y); 24 if(d==1) 25 { 26 int ans=(x%b+b)%b;
27 cout<<ans<<endl; 28 } 29 else cout<<"-1"<<endl; 30 31 return 0; 32 }

完。

歐幾裏得,擴展歐幾裏得(模板)