[OpenJudge-NOI]不定方程求解 擴展歐幾里德

代碼

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;

int ExGcd(int a,int b,int& x,int& y) {
    if(b==0){
        x=1;y=0;
        return a;
    }
    int r=ExGcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return r;
}


int main() {
    int a,b,c,gcd,ans(0);
    int x,y;
    scanf("%d%d%d",&a,&b,&c);
    gcd=ExGcd(a,b,x,y);
    if(c%gcd!=0){
        printf("0\n");
    }else{
        int x1=x*(c/gcd),y1=y*(c/gcd);
        //cout<<x1<<" "<<y1<<endl;
        for(int i=-100000;i<=100000;i++) {
            //*if(i!=0) {
                int x2=(x1+b/gcd*i),y2=(y1-a/gcd*i);
                //cout<<(x1+b/gcd*i)<<" "<<(y1-a/gcd*i)<<endl;
                if(x2>=0&&y2>=0) {
                    ans++;
                }               
            //}

        }
        printf("%d\n",ans); 
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章