您的位置:首页 > 其它

线性同余方程的求解

2015-08-03 20:16 477 查看
问题:在已知a,b,c的情况下求解是否存在q,p使之满足p*a+q*b=c;如果存在找出一组输出。

解题思路:依据扩展的欧几里得算法计算出p*a+q*b=gcd(a,b)的解x与y,则x*c/gcd(a,b)与y*c/gcd(a,b)即为问题的一组解。

扩展的欧几里得:



源代码:

[code]#include<iostream>//求解线性同余方程a*x+b*y=c
using namespace std;
int extended_gcd(int a,int b,int &x,int &y){
    if(!b){
        x=1;
        y=0;
        return a;
    }
    int r=extended_gcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return r;
}
bool linearEquation(int a,int b,int c,int&x,int&y){
    int r=extended_gcd(a,b,x,y);
    if(c%r!=0)
        return false;
    int k=c/r;
    x*=k;
    y*=k;
    return true;
}
int main(){
    int a,b,c,x,y;
    while(cin>>a>>b>>c){
        if(!linearEquation(a,b,c,x,y)){
            cout<<"No answer!"<<endl;
            continue;
        }
        cout<<x<<" "<<y<<endl;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: