Files
freeCodeCamp/guide/portuguese/algorithms/greatest-common-divisor-euclidean/index.md
Cleo Aguiar 595b007f8f update translation gcd-euclidean (#36387)
greatest-common-divisor-euclidean
2019-08-07 16:55:02 -07:00

3.9 KiB

title, localeTitle
title localeTitle
Greatest Common Divisor Euclidean Maior Divisor Comum Euclidiano

Maior Divisor Comum Euclidiano

Para este tópico, você deve saber sobre o Greatest Common Divisor (GCD) e a operação MOD primeiro.

Maior Divisor Comum (GCD)

O GCD de dois ou mais inteiros é o maior número inteiro que divide cada um dos números inteiros, de modo que o restante seja zero.

Exemplo-
GCD de 20, 30 = 10 (10 é o maior número que divide 20 e 30 com o restante como 0)
GCD de 42, 120, 285 = 3 (3 é o maior número que divide 42, 120 e 285 com o restante como 0)

Operação "mod"

A operação mod fornece o restante quando dois inteiros positivos são divididos. Nós escrevemos como segue-
A mod B = R

Isto significa que dividir A por B lhe dá o resto R, isto é diferente de sua operação de divisão que lhe dá o quociente.

Exemplo-
7 mod 2 = 1 (dividindo 7 por 2 dá o resto 1)
42 mod 7 = 0 (dividindo 42 por 7 dá o resto 0)

Com os dois conceitos acima compreendidos, você compreenderá facilmente o Algoritmo Euclidiano.

Algoritmo Euclidiano para o Maior Divisor Comum (GCD)

O Algoritmo Euclidiano encontra o GCD de 2 números.

Você entenderá melhor esse Algoritmo ao vê-lo em ação. Supondo que você queira calcular o GCD de 1220 e 516, vamos aplicar o Algoritmo Euclidiano -

Supondo que você queira calcular o GCD de 1220 e 516, vamos aplicar o Algoritmo Euclidiano - Exemplo Euclidiano

Pseudocódigo do Algoritmo
Etapa 1: Seja a, b os dois números
Etapa 2: a mod b = R
Etapa 3: deixe a = b e b = R
Passo 4: Repita os passos 2 e 3 até que o a mod b seja maior que 0
Etapa 5: GCD = b
Etapa 6: finalizar

Código JavaScript para executar o GCD-

function gcd(a, b) { 
  var R; 
  while ((a % b) > 0)  { 
    R = a % b; 
    a = b; 
    b = R; 
  } 
  return b; 
 } 

Código Javascript para executar o GCD usando Recursão-

function gcd(a, b) { 
  if (b == 0) 
    return a; 
  else 
    return gcd(b, (a % b)); 
 } 

Código C para executar o GCD usando recursão

int gcd(int a, int b) 
{ 
    // Everything divides 0  
    if (a == 0) 
       return b; 
    if (b == 0) 
       return a; 
  
    // base case 
    if (a == b) 
        return a; 
  
    // a is greater 
    if (a > b) 
        return gcd(a-b, b); 
    return gcd(a, b-a); 
}

Código C ++ para executar o GCD-

int gcd(int a,int b) {
  int R;
  while ((a % b) > 0)  {
    R = a % b;
    a = b;
    b = R;
  }
  return b;
}

Código Python para executar o GCD usando recursão

def gcd(a, b):
  if b == 0:
    return a:
  else:
    return gcd(b, (a % b))

Código Java para executar o GCD usando recursão

static int gcd(int a, int b)
{
  if(b == 0)
  {
    return a;
  }
  return gcd(b, a % b);
}

Você também pode usar o Algoritmo Euclidiano para encontrar o GCD de mais de dois números. Como o GCD é associativo, a seguinte operação é válida - GCD(a,b,c) == GCD(GCD(a,b), c)

Calcule o GCD dos dois primeiros números e depois encontre o GCD do resultado e o próximo número. Exemplo - GCD(203,91,77) == GCD(GCD(203,91),77) == GCD(7, 77) == 7

Você pode encontrar GCD de n números da mesma maneira.

Algoritmo Euclideano Estendido

Esta é uma extensão do algoritmo euclidiano. Também calcula os coeficientes x, y tais que

ax+by = gcd(a,b)

x e y são também conhecidos como coeficientes da identidade de Bézout.

Código C para Algoritmo Euclideano Estendido

struct Triplet{
	int gcd;
	int x;
	int y;
};
Triplet gcdExtendedEuclid(int a,int b){
	//Base Case
	if(b==0){
		Triplet myAns;
		myAns.gcd = a;
		myAns.x = 1;
		myAns.y = 0;
		return myAns;

	}
	Triplet smallAns = gcdExtendedEuclid(b,a%b);
	//Extended euclid says

	Triplet myAns;
	myAns.gcd = smallAns.gcd;
	myAns.x  = smallAns.y;
	myAns.y = (smallAns.x - ((a/b)*(smallAns.y)));
	return myAns;	
}