问题描述
小QQ今天做了最大公约数的题目,给定两个正整数 a 和b(a > b ),用辗转相除很快就能得到a和b的最大公约数 c,他做完心情大爽。 小QQ跑去他的好朋友RED那里炫耀,但是RED告诉他, c可以用a*x+b*y=c表示,当x为正且最小时,表达式a*x+b*y=c是唯一的。 小QQ想在RED面前表现一把,他夸下海口,一定要把x和y求出来。但是他真的不会,所以小QQ把这个任务交给你了。
输入
输入a和b,a和b都是正整数而且a>b.
输出
x和y
样例输入
84 36 876 23
样例输出
1 -2 12 -457
题已知有唯一解
a*x+b*y=c 要解出x和y,只能枚举,现在枚举x,要得出整数解y,先求出by,在看(by/b)*b是否等于by,如果y不是整数解,那就不相等,因为/向下取整
#include <iostream> #include <vector> #include <algorithm> using namespace std; int yueshu(int a,int b){ int r = a % b; while(r!=0){ a = b; b = r; r = a%b; } return b; } int main() { int a, b; while (cin >> a >> b) { int c = yueshu(a,b); int x = 1; int by = c - a * x; while((by/b)*b != by){//直到找到解 x++; by = c - a * x; } cout<<x<<" "<<by/b<<endl; } }
标签:QQ,方程,int,整数,while,等式,include,RED From: https://www.cnblogs.com/fyjie/p/17973400