2011-10-30 86 views
0

我已經寫了下面的擴展GCD算法的算法,只是不知道如何返回三元組,可以有人幫助我嗎?擴展GCD算法

#include<iostream> 
#include<math.h> 
using namespace std; 
int gcd(int a,int b) { return (b==0 ?a:gcd(b,a%b));} 
long long gcd(long a,long b) { return (b==0 ?a:gcd(b,a%b));} 
template<class Int> Int gcd(Int a,Int b) { return (b==0 ?a:gcd(b,a%b));} 
template<class Int> 
struct Triple 
{ 
    Int d,x,y; 
    Triple(Int q,Int w,Int e) :d(q),x(w),y(e)) {} 

}; 

//extended GCD 
/* computes d=gcd(a,b) 
also x and y such that d=a*x+y*b and return tripls (d,x,y) 
           */ 
template<class Int> 
Triple <Int> egcd(Int a,Int b) { 

    if(!b) return Triple<Int>(a,Int(1),Int(0)); 
    Triple<int>q=egcd(b,a%b); 
    return Triple<Int>(q.d,q.y,q.x-a/b*q.y); 
    } 

int main(){ 

    int a=35; 
    int b=13; 




return 0; 
} 

如何使用我的三重結構構造函數來完成它,請幫我

+0

您可能想看看'C++ 11'中的'std :: tuple'。 –

回答

2

(1)糾正的構造,它不會編譯(刪除一個支架):

Triple(Int q,Int w,Int e) : d(q), x(w), y(e) {} 

(2 )main()電話:

Triple <int> t = egcd(a, b); 
cout << t.d << ", " << t.x << ", " << t.y << endl; 
+0

傢伙感謝您的幫助,但我有問題,我的帳戶有這樣的常量:我不能在30天內發佈超過50個問題,是自然的還是隻是特殊的限制? –

+0

似乎有這樣的限制,請參閱http://meta.stackexchange.com/questions/89217/50-question-per-month-limit。您可以在http://meta.stackoverflow.com/上進一步研究。 – Jiri