Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 扩展欧几里德定理-两个数字A和B可以有多对x和y吗_C++_Math_Number Theory - Fatal编程技术网

C++ 扩展欧几里德定理-两个数字A和B可以有多对x和y吗

C++ 扩展欧几里德定理-两个数字A和B可以有多对x和y吗,c++,math,number-theory,C++,Math,Number Theory,GCDA,B是Ax+By。所以可以有多对x和y。如果是,我如何找到它们? 我使用以下代码查找x和y: pair< int , int>* extendedeuclid( int a, int b){ if(b == 0){ pair< int, int>* newpair = new pair< int, int>; newpair->first = 1; newpair->second

GCDA,B是Ax+By。所以可以有多对x和y。如果是,我如何找到它们? 我使用以下代码查找x和y:

pair< int ,  int>* extendedeuclid( int a,  int b){
    if(b == 0){
        pair< int,  int>* newpair = new pair< int, int>;
        newpair->first = 1;
        newpair->second = 0;
        return newpair;
    }
    pair< int, int>* oldpair = extendedeuclid(b , a%b);
    pair< int, int>* newpair = new pair< int, int>;
    newpair->first = oldpair->second;
    newpair->second = oldpair->first - ((a/b) * oldpair->second);
    return newpair; 
}
当我尝试为示例输入a=10、b=9运行此代码时
它给出了答案x=1,y=-1,这是正确的,但是在这种情况下,有没有其他方法可以找到像x=-8和y=9这样的解。

这个关系对应于贝佐特的身份

所有解都由x+k*b/gcda,b,y-k*a/gcda,b给出,如果x,y是一个特殊解,其中k是一个任意整数。 例如,扩展的欧几里德算法提供了特定的x,y解

线对b/gcda,b,-a/gcda,b是最小的u,v线对,因此ua+vb=0


来源:维基百科