度娘,我没有在水贴,别删我的帖子啊~~
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
vector<int> states;
int gcd(int a,int b){//辗转相除表示法,又称欧几里德算法
if(b!= 0) states.push_back(int(a / b));
return !b ? a : gcd(b, a % b);
}
int main(int argc, char *argv[])
{
states= vector<int>();
int a, b;
scanf("%d%d",&a,&b);
if(a < b){ a+=b;b=a - b;a-=b;}//只会出现一次 a<b的情况
int c = gcd(a,b);
printf("gcd: %d\n", c);
int x, y;
x = 1;
y = 0;
while(!states.empty()){
int x_old = x;int y_old = y;
x = y_old;
y = x_old - states.back() * y_old;
states.pop_back();
}
printf("ax+by=gcd: %d * %d + %d * %d = %d\n" ,a ,x ,b ,y ,c);
system("PAUSE");
return EXIT_SUCCESS;
}
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
vector<int> states;
int gcd(int a,int b){//辗转相除表示法,又称欧几里德算法
if(b!= 0) states.push_back(int(a / b));
return !b ? a : gcd(b, a % b);
}
int main(int argc, char *argv[])
{
states= vector<int>();
int a, b;
scanf("%d%d",&a,&b);
if(a < b){ a+=b;b=a - b;a-=b;}//只会出现一次 a<b的情况
int c = gcd(a,b);
printf("gcd: %d\n", c);
int x, y;
x = 1;
y = 0;
while(!states.empty()){
int x_old = x;int y_old = y;
x = y_old;
y = x_old - states.back() * y_old;
states.pop_back();
}
printf("ax+by=gcd: %d * %d + %d * %d = %d\n" ,a ,x ,b ,y ,c);
system("PAUSE");
return EXIT_SUCCESS;
}