PHP 7.2.0 Beta 3 Released

gmp_gcd

(PHP 4 >= 4.0.4, PHP 5, PHP 7)

gmp_gcdCalculate GCD

Açıklama

GMP gmp_gcd ( GMP `\$a` , GMP `\$b` )

Calculate greatest common divisor of `a` and `b`. The result is always positive even if either of, or both, input operands are negative.

Değiştirgeler

`a`

Either a GMP number resource in PHP 5.5 and earlier, a GMP object in PHP 5.6 and later, or a numeric string provided that it is possible to convert the latter to a number.

`b`

Either a GMP number resource in PHP 5.5 and earlier, a GMP object in PHP 5.6 and later, or a numeric string provided that it is possible to convert the latter to a number.

Dönen Değerler

A positive GMP number that divides into both `a` and `b`.

Örnekler

Örnek 1 gmp_gcd() example

``` <?php\$gcd = gmp_gcd("12", "21");echo gmp_strval(\$gcd) . "\n";?> ```

Yukarıdaki örneğin çıktısı:

```3
```

User Contributed Notes 6 notes

11
bigkm1 at gmail dot com
10 years ago
``` here is an elegant recursive solution<?php    function gcd(\$a,\$b) {    return (\$a % \$b) ? gcd(\$b,\$a % \$b) : \$b;}?> ```
Ludwig Heymbeeck
14 years ago
``` The following function is more accurate:function GCD(\$num1, \$num2) {/* finds the greatest common factor between two numbers */   while (\$num2 != 0){     \$t = \$num1 % \$num2;     \$num1 = \$num2;     \$num2 = \$t;   }   return \$num1;} ```
sean__remove__ at eternalrise_r_emove__ dot com
8 years ago
``` Here's my solution for getting the GCD of several numbers.<?php/* * function gcd() * * returns greatest common divisor * between two numbers * tested against gmp_gcd() */function gcd(\$a, \$b){    if (\$a == 0 || \$b == 0)        return abs( max(abs(\$a), abs(\$b)) );            \$r = \$a % \$b;    return (\$r != 0) ?        gcd(\$b, \$r) :        abs(\$b);}/* * function gcd_array() * * gets greatest common divisor among * an array of numbers */function gcd_array(\$array, \$a = 0){    \$b = array_pop(\$array);    return (\$b === null) ?        (int)\$a :        gcd_array(\$array, gcd(\$a, \$b));}?> ```
limas at kultur-online dot at
9 years ago
``` The previous function returns just 1 under php 5.2.4  but the following seems to work (m>0,n>0):function gcd(\$m,\$n){    \$_m=\$m;\$r=1;    if(\$m<\$n){\$t=\$m;\$m=\$n;\$n=\$t;}        while(\$r)    {        \$r=(floor(\$m/\$n)*\$n)-\$m;              \$_n=\$n;\$n=\$r;\$m=\$_m;    }         return abs(\$_n);} ```
-1
scr02001 at student dot mdh dot se
14 years ago
``` If you do not consier a or b as possible negative numbers, a GCD funktion may return a negative GCD, wich is NOT a greatest common divisor, therefore a funktion like this may be better. This considers the simplyfying of (-3)-(-6) where gcd on -3 and -6 would result in 3, not -3 as with the other function. (-3)-(-6) is (-1)-(-2) NOT (1)-(2)function eGCD(\$a,\$b){  if(\$a < 0)         \$a=0-\$a;  if(\$b < 0 )        \$b=0-\$b;  if(\$a == 0 || \$b == 0)    return 1;  if(\$a == \$b)              return a;   do{  \$rest=(int) \$a % \$b;  \$a=\$b; \$b=\$rest;  }while(\$rest >0);return \$a;} ```
-4
x-empt-php dot net at ispep dot cx
15 years ago
``` No need to compile gmp functions in just for the GCD function...  use this one instead:function GCD(\$num1, \$num2) { /* finds the greatest common factor between two numbers */    if (\$num1 < \$num2) {        \$t = \$num1;        \$num1 = \$num2;        \$num2 = \$t;    }    while (\$t = (\$num1 % \$num2) != 0) {        \$num1 = \$num2;        \$num2 = \$t;    }    return \$num2;} ```