2) If L is empty, g is the gcd, else L.pop(0), L[0] = g and goto 1). Christophe Bal於 2013年7月11日星期四UTC+8下午6時04分19秒寫道: > > Hello, > gcd(a ; b ; c) = gcd(a ; gcd(b ; c)) = gcd(gcd(a ; b) ; c)). > > The best ways to compute gcd(a ; b ; c ; d ; e ; ...) should be to first > sort the arguments. If we suppose that a <= b <= c <= d <= e <= ... . Let > L be this list of integers. Then you can apply the following steps. > > 1) Compute g = gcd(L[0] ; L[1]). If the result is 1 then nothing > else has to be done. > 2) If L is empty, g is the gcd, else remove L[0] and L[1] and go to > 1). > > > Christophe BAL > > > 2013/7/11 Mateusz Paprocki <[email protected] <javascript:>> > >> Hi, >> >> On 11 July 2013 11:14, Thilina Rathnayake <[email protected]<javascript:> >> > wrote: >> >>> Hi, >>> >>> I implemented the extended_euclid() in Diophantine module without >>> knowing that >>> gcdex() existed. However, Chris pointed out that extended_euclid() is >>> much faster. >>> Take a look at >>> here<https://github.com/sympy/sympy/pull/2168#discussion-diff-4672557>. >>> He suggested to rename extended_euclid() to igcdex(). >>> >>> I also feel that when we are dealing with integers, i.e when using >>> igcd() we should >>> allow inputting more than two numbers at a time. It doesn't break the >>> API, does it? >>> >> gcdex() is a wrapper and works over as many domains as possible, so it >> has to be slower than a dedicated function. However, it's speed can be >> improved in the integer case. There is already igcdex() function >> sympy.core.numbers, so you should be using this if you need extended >> Euclidean algorithm over integers (strange no one pointed this out earlier, >> because this function is there since 2008). Also extended_euclid() is >> recursive (at least in that PR) and igcdex() is iterative. >> >>> Regards, >>> Thilina >>> >>> >>> On Thu, Jul 11, 2013 at 2:12 PM, Mateusz Paprocki >>> <[email protected]<javascript:> >>> > wrote: >>> >>>> Hi, >>>> >>>> On 11 July 2013 10:17, Stephen Loo <[email protected] <javascript:>>wrote: >>>> >>>>> Hi all, >>>>> >>>>> I found that there are many different kind of gcd in sympy different >>>>> module, such as >>>>> >>>>> sympy.core.numbers.igcd >>>>> sympy.polys.polytools.gcd >>>>> sympy.polys.polytools.gcdex >>>>> sympy.polys.polytools.gcd_list >>>>> sympy.polys.polytools.half_gcdex >>>>> >>>>> And the new one >>>>> sympy.solvers.diophantine.extended_euclid >>>>> >>>>> They calculate integer gcd or polynomial gcd. I suggest to make single >>>>> public function call, like gamma, put in integer argument and return >>>>> integer, put in polynomial argument and return polynomial. And gcd >>>>> function >>>>> should not limit to 2 integer only, for example, gcd(10, 15, 20) = 5 >>>>> >>>>> Any idea? Any suggestion? >>>>> >>>> >>>> First of all, functions gcdex() and half_gcdex() don't count because >>>> they implement extended Euclidean algorithm. I didn't know about >>>> extended_euclid(). It seems redundant. igcd() is a specialized function >>>> that works only with integers and is needed internally to reduce overhead >>>> that gcd() function has. The function you would like to have is gcd(). It >>>> works with numbers, polynomials and whatever that has a gcd() method. It >>>> either takes two arguments (plus symbols and options in polynomial case) >>>> or >>>> one iterable (plus symbols and options in polynomial case). The iterable >>>> case is equivalent to calling gcd_list() explicitly (that's why there is >>>> gcd_list()). Currently it isn't possible to support gcd(1, 2, 3, 4, 5) >>>> syntax, because that effectively means (in the current API) compute GCD of >>>> 1 and 2 which are polynomials in 3, 4, 5 (treated as symbols) in the >>>> default coefficient domain (which is integer ring). In the integer case >>>> this limitation could be relaxed easily, but then the API would be >>>> inconsistent, because gcd(x, y, z) would still mean GCD of polynomials x >>>> and y in z (x*z**0, y*z**0) (over ZZ[x, y]). >>>> >>>> >>>>> Thanks. >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "sympy" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected] <javascript:>. >>>>> To post to this group, send email to [email protected]<javascript:> >>>>> . >>>>> Visit this group at http://groups.google.com/group/sympy. >>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>> >>>>> >>>>> >>>> >>>> Mateusz >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "sympy" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected] <javascript:>. >>>> To post to this group, send email to [email protected]<javascript:> >>>> . >>>> Visit this group at http://groups.google.com/group/sympy. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected] <javascript:>. >>> To post to this group, send email to [email protected]<javascript:> >>> . >>> Visit this group at http://groups.google.com/group/sympy. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> Mateusz >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sympy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] <javascript:> >> . >> Visit this group at http://groups.google.com/group/sympy. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > >
-- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.
