解等式方程,涉及要求出整数解

问题描述

小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;
        
    }
}

 



posted @ 2024-01-18 20:56  fyj!  阅读(30)  评论(0)    收藏  举报