Algoritmo de Euclides

Animação do algoritmo de Euclides para os inteiros 252 e 105. As barras representam múltiplos de 21, o máximo divisor comum (MDC). Em cada passo, o número menor é subtraído ao maior, até um número ser reduzido a zero. O número restante é o MDC.

Na matemática, o algoritmo de Euclides,[nota 1] é um método eficiente para computar o máximo divisor comum (MDC) de dois inteiros, o maior número que divide ambos sem deixar resto. Recebeu o nome do antigo matemático grego Euclides, que o descreveu pela primeira vez nos seus Elementos (c.300 a.C.). É um exemplo de um algoritmo, e é um dos algoritmos mais antigos em uso comum. Pode ser usado para reduzir frações à sua forma mais simples e faz parte de muitos outros cálculos na teoria dos números e na criptografia.

O algoritmo de Euclides baseia-se no princípio de que o máximo divisor comum de dois números não muda se o número maior for substituído pela sua diferença com o número menor. Por exemplo, 21 é o MDC de 252 e 105 (pois 252 = 21 × 12 e 105 = 21 × 5), e o mesmo número 21 é também o MDC de 105 e 252 − 105 = 147. Como esta substituição reduz o maior dos dois números, a repetição deste processo produz pares de números sucessivamente menores até que os dois números se tornem iguais. Quando isso ocorre, esse número é o MDC dos dois números originais. Ao reverter os passos ou utilizar o algoritmo de Euclides estendido, o MDC pode ser expresso como uma combinação linear dos dois números originais, ou seja, a soma dos dois números, cada um multiplicado por um inteiro (por exemplo, 21 = 5 × 105 + (−2) × 252). O facto de o MDC poder sempre ser expresso desta forma é conhecido como a identidade de Bézout.

A versão do algoritmo de Euclides descrita acima — que segue a apresentação original de Euclides — pode exigir muitos passos de subtração para encontrar o MDC quando um dos números dados é muito maior do que o outro. Uma versão mais eficiente do algoritmo atalha estes passos, substituindo o maior dos dois números pelo seu resto quando dividido pelo menor dos dois (com esta versão, o algoritmo para ao chegar a um resto zero). Com esta melhoria, o algoritmo nunca requer mais passos do que cinco vezes o número de dígitos (na base 10) do menor inteiro. Isto foi provado por Gabriel Lamé em 1844 (Teorema de Lamé),[1][2] e marca o início da teoria da complexidade computacional. Métodos adicionais para melhorar a eficiência do algoritmo foram desenvolvidos no século XX.

O algoritmo de Euclides tem muitas aplicações teóricas e práticas. É usado para reduzir frações à sua forma mais simples e para realizar a divisão na aritmética modular. As computações que utilizam este algoritmo fazem parte dos protocolos criptográficos que são usados para proteger as comunicações na internet, e em métodos para quebrar estes criptossistemas através da fatoração de grandes números compostos. O algoritmo de Euclides pode ser usado para resolver equações diofantinas, tais como encontrar números que satisfazem múltiplas congruências de acordo com o teorema chinês do resto, para construir frações contínuas, e para encontrar aproximações racionais precisas para números reais. Por fim, pode ser usado como uma ferramenta básica para provar teoremas na teoria dos números, tais como o teorema dos quatro quadrados de Lagrange e a unicidade das fatorações em primos.

O algoritmo original foi descrito apenas para números naturais e comprimentos geométricos (números reais), mas o algoritmo foi generalizado no século XIX para outros tipos de números, tais como os inteiros gaussianos e polinômios de uma variável. Isto levou a noções modernas em álgebra abstrata, tais como os domínios euclidianos.

Contexto: máximo divisor comum

O algoritmo de Euclides calcula o máximo divisor comum (MDC) de dois números naturais a e b. O máximo divisor comum g é o maior número natural que divide tanto a quanto b sem deixar resto. Sinônimos para MDC incluem maior fator comum, maior divisor comum e maior medida comum. O máximo divisor comum é frequentemente escrito como mdc(a, b) ou, de forma mais simples, como (a, b),[3] embora a última notação seja ambígua, sendo também usada para conceitos como um ideal no anel de inteiros, que está intimamente relacionado ao MDC.

Se mdc(a, b) = 1, então diz-se que a e b são coprimos (ou primos entre si).[4] Esta propriedade não implica que a ou b sejam eles próprios números primos.[5] Por exemplo, 6 e 35 fatoram-se como 6 = 2 × 3 e 35 = 5 × 7, de modo que não são primos, mas os seus fatores primos são diferentes, logo 6 e 35 são coprimos, sem outros fatores comuns além de 1.

"Retângulo alto e estreito dividido em uma grade de quadrados. O retângulo tem dois quadrados de largura e cinco quadrados de altura."
Um retângulo 24×60 é coberto com dez ladrilhos quadrados 12×12, onde 12 é o MDC de 24 e 60. De modo mais geral, um retângulo a×b pode ser coberto com ladrilhos quadrados de lado c apenas se c for um divisor comum de a e b.

Seja g = mdc(a, b). Como a e b são ambos múltiplos de g, eles podem ser escritos como a = mg e b = ng, e não existe um número maior G > g para o qual isso seja verdade. Os números naturais m e n devem ser coprimos, uma vez que qualquer fator comum poderia ser fatorado de m e n para tornar g maior. Assim, qualquer outro número c que divida tanto a quanto b também deve dividir g. O máximo divisor comum g de a e b é o único divisor comum (positivo) de a e b que é divisível por qualquer outro divisor comum c.[6]

O máximo divisor comum pode ser visualizado da seguinte forma.[7] Considere uma área retangular de a por b, e qualquer divisor comum c que divida tanto a quanto b exatamente. Os lados do retângulo podem ser divididos em segmentos de comprimento c, o que divide o retângulo em uma grade de quadrados de lado c. O MDC g é o maior valor de c para o qual isto é possível. Para ilustração, uma área retangular 24×60 pode ser dividida numa grade de: quadrados 1×1, quadrados 2×2, quadrados 3×3, quadrados 4×4, quadrados 6×6 ou quadrados 12×12. Portanto, 12 é o MDC de 24 e 60. Uma área retangular 24×60 pode ser dividida em uma grade de quadrados 12×12, com dois quadrados ao longo de uma borda (24/12 = 2) e cinco quadrados ao longo da outra (60/12 = 5).

O máximo divisor comum de dois números a e b é o produto dos fatores primos partilhados pelos dois números, onde cada fator primo pode ser repetido tantas vezes quantas divida tanto a quanto b.[8] Por exemplo, uma vez que 1386 pode ser fatorado em 2 × 3 × 3 × 7 × 11, e 3213 pode ser fatorado em 3 × 3 × 3 × 7 × 17, o MDC de 1386 e 3213 é igual a 63 = 3 × 3 × 7, o produto dos seus fatores primos partilhados (com o 3 repetido, uma vez que 3 × 3 divide ambos). Se dois números não possuem fatores primos em comum, o seu MDC é 1 (obtido aqui como uma instância do produto vazio); em outras palavras, eles são coprimos. Uma vantagem fundamental do algoritmo de Euclides é que ele pode encontrar o MDC de forma eficiente sem a necessidade de calcular os fatores primos.[9][10] Acredita-se que a fatoração de inteiros grandes seja um problema computacionalmente muito difícil, e a segurança de muitos protocolos criptográficos amplamente utilizados baseia-se na sua inviabilidade.[11]

Outra definição do MDC é útil na matemática avançada, particularmente na teoria dos anéis.[12] O máximo divisor comum g de dois números não-nulos a e b é também a sua menor combinação linear inteira positiva, isto é, o menor número positivo da forma ua + vb onde u e v são inteiros. O conjunto de todas as combinações lineares inteiras de a e b é, na verdade, o mesmo que o conjunto de todos os múltiplos de g (mg, onde m é um número inteiro). Na linguagem matemática moderna, o ideal gerado por a e b é o ideal gerado apenas por g (um ideal gerado por um único elemento é chamado de ideal principal, e todos os ideais dos inteiros são ideais principais). Algumas propriedades do MDC são, de fato, mais fáceis de visualizar com esta descrição, por exemplo, o fato de que qualquer divisor comum de a e b também divide o MDC (ele divide ambos os termos de ua + vb). A equivalência desta definição de MDC com as outras definições é descrita abaixo.

O MDC de três ou mais números é igual ao produto dos fatores primos comuns a todos os números,[13] mas também pode ser calculado obtendo-se repetidamente os MDCs de pares de números.[14] Por exemplo,

mdc(a, b, c) = mdc(a, mdc(b, c)) = mdc(mdc(a, b), c) = mdc(mdc(a, c), b).

Deste modo, o algoritmo de Euclides, que computa o MDC de dois inteiros, é suficiente para calcular o MDC de um número arbitrário de inteiros.

Descrição

Procedimento

O algoritmo de Euclides pode ser pensado como a construção de uma sequência de números inteiros não-negativos que começa com os dois inteiros dados e e terminará eventualmente com o número inteiro zero: com O inteiro será então o MDC e podemos afirmar que O algoritmo indica como construir os restos intermediários através da divisão com resto no par precedente encontrando um quociente inteiro de modo que:

Como a sequência de inteiros não-negativos é estritamente decrescente, ela eventualmente deve terminar. Por outras palavras, uma vez que para todo e cada é um inteiro estritamente menor que o precedente não pode haver infinitos inteiros não-negativos menores que zero e, portanto, o algoritmo deve terminar. De facto, o algoritmo terminará sempre no n-ésimo passo com igual a zero.[15]

Para ilustrar, suponha que se solicite o MDC de 1071 e 462. A sequência é inicialmente e, a fim de encontrar precisamos de encontrar inteiros e tais que:

Isto dá o quociente uma vez que Isto determina e assim a sequência agora é O próximo passo é continuar a sequência para encontrar , encontrando inteiros e tais que:

Isto dá o quociente uma vez que Isto determina e a sequência agora é O passo seguinte é continuar a sequência para encontrar , encontrando inteiros e tais que:

Isto dá o quociente uma vez que Isto determina e a sequência é concluída como , já que nenhum outro número inteiro não-negativo menor que pode ser encontrado. O penúltimo resto é, portanto, o MDC solicitado:

Podemos generalizar ligeiramente abandonando qualquer requisito de ordenação nos dois valores iniciais e Se o algoritmo pode continuar e encontrar trivialmente que , visto que a sequência de restos será Se então também podemos continuar uma vez que sugerindo que o próximo resto deve ser o próprio , e a sequência é Normalmente, isto seria inválido porque quebra o requisito , mas agora temos por construção, logo o requisito é automaticamente satisfeito e o algoritmo de Euclides pode continuar normalmente. Portanto, abandonar qualquer ordenação entre os dois primeiros inteiros não afeta a conclusão de que a sequência deve eventualmente terminar, porque o próximo resto sempre satisfará e tudo continua como acima. As únicas modificações que precisam de ser feitas são que apenas para e que a subsequência de inteiros não-negativos para é estritamente decrescente, excluindo assim de ambas as afirmações.

Prova de validade

A validade do algoritmo de Euclides pode ser provada por um argumento de dois passos.[16] No primeiro passo, mostra-se que o último resto não-nulo rN−1 divide tanto a quanto b. Por ser um divisor comum, ele deve ser menor ou igual ao máximo divisor comum g. No segundo passo, mostra-se que qualquer divisor comum de a e b, incluindo g, deve dividir rN−1; portanto, g deve ser menor ou igual a rN−1. Estas duas desigualdades opostas implicam rN−1 = g.

Para demonstrar que rN−1 divide tanto a quanto b (o primeiro passo), rN−1 divide o seu predecessor rN−2

rN−2 = qN rN−1

visto que o resto final rN é zero. rN−1 também divide o seu predecessor anterior rN−3

rN−3 = qN−1 rN−2 + rN−1

porque divide ambos os termos no lado direito da equação. Iterando o mesmo argumento, rN−1 divide todos os restos precedentes, incluindo a e b. Nenhum dos restos precedentes rN−2, rN−3, etc., divide a e b, uma vez que deixam um resto. Como rN−1 é um divisor comum de a e b, rN−1g.

No segundo passo, qualquer número natural c que divida tanto a quanto b (por outras palavras, qualquer divisor comum de a e b) divide os restos rk. Por definição, a e b podem ser escritos como múltiplos de c: a = mc e b = nc, onde m e n são números naturais. Portanto, c divide o resto inicial r0, uma vez que r0 = aq0b = mcq0nc = (mq0n)c. Um argumento análogo mostra que c também divide os restos subsequentes r1, r2, etc. Portanto, o máximo divisor comum g deve dividir rN−1, o que implica que grN−1. Como a primeira parte do argumento mostrou o inverso (rN−1g), conclui-se que g = rN−1. Assim, g é o máximo divisor comum de todos os pares sucessivos:[17][18]

Exemplo resolvido

Animação na qual ladrilhos quadrados progressivamente menores são adicionados para cobrir um retângulo completamente.
Animação baseada em subtração do algoritmo de Euclides. O retângulo inicial tem dimensões a = 1071 e b = 462. Quadrados de tamanho 462×462 são colocados dentro dele deixando um retângulo de 462×147. Este retângulo é ladrilhado com quadrados de 147×147 até restar um retângulo de 21×147, que por sua vez é ladrilhado com quadrados de 21×21, não deixando nenhuma área descoberta. O menor tamanho de quadrado, 21, é o MDC de 1071 e 462.

Para ilustração, o algoritmo de Euclides pode ser usado para encontrar o máximo divisor comum de a = 1071 e b = 462. Para começar, subtraem-se múltiplos de 462 de 1071 até que o resto seja menor que 462. Dois desses múltiplos podem ser subtraídos (q0 = 2), deixando um resto de 147:

1071 = 2 × 462 + 147.

Em seguida, subtraem-se múltiplos de 147 de 462 até que o resto seja menor que 147. Três múltiplos podem ser subtraídos (q1 = 3), deixando um resto de 21:

462 = 3 × 147 + 21.

Depois, subtraem-se múltiplos de 21 de 147 até que o resto seja menor que 21. Sete múltiplos podem ser subtraídos (q2 = 7), não deixando resto:

147 = 7 × 21 + 0.

Como o último resto é zero, o algoritmo termina com 21 como o máximo divisor comum de 1071 e 462. Isto concorda com o mdc(1071, 462) encontrado pela fatoração em primos acima. Na forma de tabela, os passos são:

Passo kEquaçãoQuociente e resto
01071 = q0 462 + r0q0 = 2 e r0 = 147
1462 = q1 147 + r1q1 = 3 e r1 = 21
2147 = q2 21 + r2q2 = 7 e r2 = 0; algoritmo termina

Visualização

O algoritmo de Euclides pode ser visualizado em termos da analogia do ladrilhamento apresentada acima para o máximo divisor comum.[19] Assuma que desejamos cobrir exatamente um retângulo a×b com ladrilhos quadrados, onde a é o maior dos dois números. Primeiro, tentamos ladrilhar o retângulo usando ladrilhos quadrados b×b; no entanto, isto deixa um retângulo residual r0×b não ladrilhado, onde r0 < b. Tentamos então ladrilhar o retângulo residual com ladrilhos quadrados r0×r0. Isto deixa um segundo retângulo residual r1×r0, o qual tentamos ladrilhar usando ladrilhos quadrados r1×r1, e assim por diante. A sequência termina quando não houver retângulo residual, isto é, quando os ladrilhos quadrados cobrirem exatamente o retângulo residual anterior. O comprimento dos lados do menor ladrilho quadrado é o MDC das dimensões do retângulo original. Por exemplo, o menor ladrilho quadrado na figura adjacente é de 21×21 (mostrado a vermelho), e 21 é o MDC de 1071 e 462, as dimensões do retângulo original (mostrado a verde).

Divisão euclidiana

A cada passo k, o algoritmo de Euclides computa um quociente qk e um resto rk a partir de dois números rk−1 e rk−2

rk−2 = qk rk−1 + rk,

onde rk é não-negativo e estritamente menor que o valor absoluto de rk−1. O teorema que fundamenta a definição da divisão euclidiana garante que tal quociente e resto sempre existam e sejam únicos.[20]

Na versão original do algoritmo de Euclides, o quociente e o resto são encontrados por subtração repetida; ou seja, rk−1 é subtraído de rk−2 repetidamente até que o resto rk seja menor que rk−1. Depois disso, rk e rk−1 são trocados e o processo é iterado. A divisão euclidiana reduz todos os passos entre duas trocas a um único passo, sendo assim mais eficiente. Além disso, os quocientes não são necessários, pelo que se pode substituir a divisão euclidiana pela operação módulo, que fornece apenas o resto. Deste modo, a iteração do algoritmo de Euclides torna-se simplesmente

rk = rk−2 mod rk−1.

Implementações

As implementações do algoritmo podem ser expressas em pseudocódigo. Por exemplo, a versão baseada em divisão pode ser programada como[21]

função mdc(a, b)
    enquanto b ≠ 0
        t := b
        b := a mod b
        a := t
    retorna a

No início da k-ésima iteração, a variável b contém o último resto rk−1, ao passo que a variável a contém o seu predecessor, rk−2. O passo b := a mod b é equivalente à fórmula de recursão acima rkrk−2 mod rk−1. A variável temporária t contém o valor de rk−1 enquanto o próximo resto rk está a ser calculado. No final da iteração do ciclo, a variável b contém o resto rk, ao passo que a variável a contém o seu predecessor, rk−1.

(Se forem permitidas entradas negativas, ou se a função mod puder retornar valores negativos, a última linha deverá ser substituída por retorna abs(a).)

Na versão baseada em subtração, que foi a versão original de Euclides, o cálculo do resto (b := a mod b) é substituído por uma subtração repetida.[22] Ao contrário da versão baseada na divisão, que trabalha com inteiros arbitrários como entrada, a versão baseada na subtração pressupõe que a entrada consista em inteiros positivos e para quando a = b:

função mdc(a, b)
    enquanto a ≠ b 
        se a > b
            a := a − b
        senão
            b := b − a
    retorna a

As variáveis a e b alternam contendo os restos anteriores rk−1 e rk−2. Assuma que a é maior que b no início de uma iteração; então a é igual a rk−2, uma vez que rk−2 > rk−1. Durante a iteração do ciclo, a é reduzido por múltiplos do resto anterior b até que a seja menor que b. Então a é o próximo resto rk. De seguida, b é reduzido por múltiplos de a até ser novamente menor que a, resultando no próximo resto rk+1, e assim por diante.

A versão recursiva[23] baseia-se na igualdade dos MDCs de restos sucessivos e na condição de paragem mdc(rN−1, 0) = rN−1.

função mdc(a, b)
    se b = 0
        retorna a
    senão
        retorna mdc(b, a mod b)

(Como acima, se forem permitidas entradas negativas, ou se a função mod puder retornar valores negativos, a instrução retorna a deverá ser substituída por retorna max(a, −a).)

Para ilustração, o mdc(1071, 462) é calculado a partir do equivalente mdc(462, 1071 mod 462) = mdc(462, 147). Este último MDC é calculado a partir do mdc(147, 462 mod 147) = mdc(147, 21), que por sua vez é calculado a partir do mdc(21, 147 mod 21) = mdc(21, 0) = 21.

Método dos menores restos absolutos

Noutra versão do algoritmo de Euclides, o quociente a cada passo é aumentado em uma unidade se o resto negativo resultante for menor em magnitude do que o resto positivo típico.[24][25] Anteriormente, a equação

rk−2 = qk rk−1 + rk

assumia que |rk−1| > rk > 0. No entanto, um resto negativo alternativo ek pode ser calculado:

rk−2 = (qk + 1) rk−1 + ek

se rk−1 > 0 ou

rk−2 = (qk – 1) rk−1 + ek

se rk−1 < 0.

Se rk for substituído por ek quando |ek| < |rk|, então obtém-se uma variante do algoritmo de Euclides de tal modo que

|rk||rk−1| / 2

a cada passo.

Leopold Kronecker mostrou que esta versão exige o menor número de passos de qualquer versão do algoritmo de Euclides.[24][25] Mais genericamente, foi provado que, para quaisquer números de entrada a e b, o número de passos é mínimo se e somente se qk for escolhido de modo que onde é a proporção áurea.[26]

Desenvolvimento histórico

"Representação de Euclides como um homem barbudo segurando um compasso sobre uma tábua."
O algoritmo de Euclides foi provavelmente inventado antes de Euclides, aqui retratado a segurar um compasso numa pintura de cerca de 1474.

O algoritmo de Euclides é um dos algoritmos mais antigos em uso comum.[27] Ele aparece em Os Elementos de Euclides (c. 300 a.C.), especificamente no Livro 7 (Proposições 1–2) e no Livro 10 (Proposições 2–3). No Livro 7, o algoritmo é formulado para inteiros, ao passo que no Livro 10, é formulado para comprimentos de segmentos de reta. (No uso moderno, dir-se-ia que foi formulado aí para números reais. Mas comprimentos, áreas e volumes, representados como números reais no uso moderno, não são medidos nas mesmas unidades e não existe uma unidade natural de comprimento, área ou volume; o conceito de números reais era desconhecido naquela época.) O último algoritmo é geométrico. O MDC de dois comprimentos a e b corresponde ao maior comprimento g que mede a e b uniformemente; por outras palavras, os comprimentos a e b são ambos múltiplos inteiros do comprimento g.

O algoritmo provavelmente não foi descoberto por Euclides, que compilou resultados de matemáticos anteriores nos seus Elementos.[28][29] O matemático e historiador B. L. van der Waerden sugere que o Livro VII deriva de um livro-texto sobre teoria dos números escrito por matemáticos na escola de Pitágoras.[30] O algoritmo já era provavelmente conhecido por Eudoxo de Cnido (cerca de 375 a.C.).[27][31] O algoritmo pode ser até anterior a Eudoxo,[32][33] a julgar pelo uso do termo técnico ἀνθυφαίρεσις (anthyphairesis, subtração recíproca) em obras de Euclides e Aristóteles.[34] Claude Brezinski, seguindo as observações de Papo de Alexandria, credita o algoritmo a Teeteto (c. 417 – c. 369 a.C.).[35]

Séculos mais tarde, o algoritmo de Euclides foi descoberto de forma independente tanto na Índia quanto na China,[36] primariamente para resolver equações diofantinas que surgiam na astronomia e na elaboração de calendários precisos. No final do século V, o matemático e astrônomo indiano Aryabhata descreveu o algoritmo como o "pulverizador",[37] talvez devido à sua eficácia na resolução de equações diofantinas.[38] Embora um caso especial do teorema chinês do resto já tivesse sido descrito no livro chinês Sunzi Suanjing,[39] a solução geral foi publicada por Qin Jiushao no seu livro de 1247 Shushu Jiuzhang (數書九章 Tratado Matemático em Nove Seções).[40] O algoritmo de Euclides foi descrito numericamente pela primeira vez e popularizado na Europa na segunda edição da obra Problèmes plaisants et délectables (Problemas agradáveis e deleitáveis, 1624) de Bachet.[37] Na Europa, foi igualmente utilizado para resolver equações diofantinas e no desenvolvimento das frações contínuas. O algoritmo de Euclides estendido foi publicado pelo matemático inglês Nicholas Saunderson,[41] que o atribuiu a Roger Cotes como um método para computar frações contínuas de forma eficiente.[42]

No século XIX, o algoritmo de Euclides levou ao desenvolvimento de novos sistemas numéricos, tais como os inteiros gaussianos e os inteiros de Eisenstein. Em 1815, Carl Friedrich Gauss usou o algoritmo de Euclides para demonstrar a fatoração única dos inteiros gaussianos, embora a sua obra tenha sido publicada pela primeira vez em 1832.[43] Gauss mencionou o algoritmo no seu Disquisitiones Arithmeticae (publicado em 1801), mas apenas como um método para frações contínuas.[36] Peter Gustav Lejeune Dirichlet parece ter sido o primeiro a descrever o algoritmo de Euclides como a base para grande parte da teoria dos números.[44] Lejeune Dirichlet notou que muitos resultados da teoria dos números, tais como a fatoração única, se verificariam como verdadeiros para qualquer outro sistema de números ao qual o algoritmo de Euclides pudesse ser aplicado.[45] As palestras de Lejeune Dirichlet sobre teoria dos números foram editadas e expandidas por Richard Dedekind, que usou o algoritmo de Euclides para estudar os inteiros algébricos, um novo tipo geral de número. Por exemplo, Dedekind foi o primeiro a provar o teorema dos dois quadrados de Fermat usando a fatoração única dos inteiros gaussianos.[46] Dedekind também definiu o conceito de um domínio euclidiano, um sistema numérico no qual uma versão generalizada do algoritmo de Euclides pode ser definida (como descrito abaixo). Nas décadas finais do século XIX, o algoritmo de Euclides foi gradualmente eclipsado pela teoria mais geral dos ideais de Dedekind.[47]

"[O algoritmo de Euclides] é o avô de todos os algoritmos, porque é o algoritmo não-trivial mais antigo que sobreviveu até aos dias de hoje."

Donald Knuth, The Art of Computer Programming, Vol. 2: Seminumerical Algorithms, 2ª edição (1981), p. 318.

Outras aplicações do algoritmo de Euclides foram desenvolvidas no século XIX. Em 1829, Charles Sturm mostrou que o algoritmo era útil no método da cadeia de Sturm para contar as raízes reais de polinômios em qualquer intervalo dado.[48]

O algoritmo de Euclides foi o primeiro algoritmo de relação inteira, que é um método para encontrar relações inteiras entre números reais comensuráveis. Vários novos algoritmos de relação inteira foram desenvolvidos, tais como o algoritmo de Helaman Ferguson e R. W. Forcade (1979)[49] e o algoritmo LLL.[50][51]

Em 1969, Cole e Davie desenvolveram um jogo para dois jogadores baseado no algoritmo de Euclides, chamado The Game of Euclid (O Jogo de Euclides),[52] o qual possui uma estratégia ótima.[53] Os jogadores começam com duas pilhas de a e b pedras. Os jogadores alternam-se a remover m múltiplos da pilha menor a partir da maior. Assim, se as duas pilhas consistirem em x e y pedras, onde x é maior que y, o próximo jogador pode reduzir a pilha maior de x pedras para xmy pedras, contanto que este último seja um inteiro não-negativo. O vencedor é o primeiro jogador a reduzir uma pilha a zero pedras.[54][55]

Aplicações matemáticas

Identidade de Bézout

A identidade de Bézout afirma que o máximo divisor comum g de dois inteiros a e b pode ser representado como uma soma linear dos dois números originais a e b.[56] Por outras palavras, é sempre possível encontrar inteiros s e t de tal modo que g = sa + tb.[57][58]

Os inteiros s e t podem ser calculados a partir dos quocientes q0, q1, etc., revertendo a ordem das equações no algoritmo de Euclides.[59] Começando pela penúltima equação, g pode ser expresso em termos do quociente qN−1 e dos dois restos precedentes, rN−2 e rN−3:

g = rN−1 = rN−3qN−1 rN−2.

Esses dois restos podem ser igualmente expressos em termos dos seus quocientes e restos precedentes,

rN−2 = rN−4qN−2 rN−3 e
rN−3 = rN−5qN−3 rN−4.

A substituição destas fórmulas para rN−2 e rN−3 na primeira equação produz g como uma soma linear dos restos rN−4 e rN−5. O processo de substituição de restos por fórmulas envolvendo os seus predecessores pode ser continuado até que os números originais a e b sejam alcançados:

r2 = r0q2 r1
r1 = bq1 r0
r0 = aq0 b.

Após todos os restos r0, r1, etc. terem sido substituídos, a equação final expressa g como uma soma linear de a e b, de modo que g = sa + tb.

O algoritmo de Euclides, e logo a identidade de Bézout, pode ser generalizado para o contexto de domínios euclidianos.

Ideais principais e problemas relacionados

A identidade de Bézout fornece ainda outra definição do máximo divisor comum g de dois números a e b.[12] Considere o conjunto de todos os números ua + vb, onde u e v são dois inteiros quaisquer. Visto que a e b são ambos divisíveis por g, todos os números no conjunto são divisíveis por g. Por outras palavras, cada número do conjunto é um múltiplo inteiro de g. Isto é verdade para qualquer divisor comum de a e b. No entanto, ao contrário de outros divisores comuns, o máximo divisor comum é um membro do conjunto; pela identidade de Bézout, a escolha u = s e v = t fornece g. Um divisor comum menor não pode ser membro do conjunto, uma vez que todo membro do conjunto deve ser divisível por g. Inversamente, qualquer múltiplo m de g pode ser obtido escolhendo u = ms e v = mt, onde s e t são os inteiros da identidade de Bézout. Isto pode ser visto multiplicando a identidade de Bézout por m,

mg = msa + mtb.

Portanto, o conjunto de todos os números ua + vb é equivalente ao conjunto de múltiplos m de g. Noutras palavras, o conjunto de todas as possíveis somas de múltiplos inteiros de dois números (a e b) é equivalente ao conjunto de múltiplos de mdc(a, b). Diz-se que o MDC é o gerador do ideal de a e b. Esta definição de MDC levou aos conceitos modernos em álgebra abstrata de um ideal principal (um ideal gerado por um único elemento) e de um domínio de ideais principais (um domínio no qual todo ideal é um ideal principal).

Certos problemas podem ser resolvidos usando este resultado.[60] Por exemplo, considere dois copos de medição de volume a e b. Ao adicionar/subtrair u múltiplos do primeiro copo e v múltiplos do segundo copo, qualquer volume ua + vb pode ser medido. Estes volumes são todos múltiplos de g = mdc(a, b).

Algoritmo de Euclides estendido

Os inteiros s e t da identidade de Bézout podem ser computados de forma eficiente usando o algoritmo de Euclides estendido. Esta extensão adiciona duas equações recursivas ao algoritmo de Euclides[61]

sk = sk−2qksk−1
tk = tk−2qktk−1

com os valores iniciais

s−2 = 1, t−2 = 0
s−1 = 0, t−1 = 1.

Usando esta recursão, os inteiros de Bézout s e t são dados por s = sN e t = tN, onde N + 1 é o passo no qual o algoritmo termina com rN+1 = 0.

A validade desta abordagem pode ser demonstrada por indução. Assuma que a fórmula de recursão está correta até ao passo k − 1 do algoritmo; ou seja, assuma que

rj = sj a + tj b

para todo j menor que k. O k-ésimo passo do algoritmo fornece a equação

rk = rk−2qkrk−1.

Uma vez que se assumiu que a fórmula de recursão está correta para rk−2 e rk−1, eles podem ser expressos em termos das correspondentes variáveis s e t

rk = (sk−2 a + tk−2 b) − qk(sk−1 a + tk−1 b).

Reorganizar esta equação produz a fórmula de recursão para o passo k, como pretendido

rk = sk a + tk b = (sk−2qksk−1) a + (tk−2qktk−1) b.

Método matricial

Os inteiros s e t também podem ser encontrados usando um método de matrizes equivalente.[62] A sequência de equações do algoritmo de Euclides

pode ser escrita como um produto de matrizes quociente 2×2 multiplicando um vetor bidimensional de restos

Seja M representativo do produto de todas as matrizes quociente

Isto simplifica o algoritmo de Euclides para a forma

Para expressar g como uma soma linear de a e b, ambos os lados desta equação podem ser multiplicados pela inversa da matriz M.[62][63] O determinante de M é igual a (−1)N+1, já que é igual ao produto dos determinantes das matrizes quociente, cada um dos quais é menos um. Visto que o determinante de M nunca é zero, o vetor dos restos finais pode ser resolvido usando a inversa de M

Visto que a equação superior fornece

g = (−1)N+1 ( m22 am12 b),

os dois inteiros da identidade de Bézout são s = (−1)N+1m22 e t = (−1)Nm12. O método matricial é tão eficiente quanto a recursão equivalente, com duas multiplicações e duas adições por passo do algoritmo de Euclides.

Lema de Euclides e fatoração única

A identidade de Bézout é essencial para muitas aplicações do algoritmo de Euclides, tal como demonstrar a fatoração única de números em fatores primos.[64] Para ilustrar isto, suponha que um número L pode ser escrito como um produto de dois fatores u e v, ou seja, L = uv. Se outro número w também divide L mas é coprimo de u, então w deve dividir v, pelo seguinte argumento: Se o máximo divisor comum de u e w é 1, então inteiros s e t podem ser encontrados de modo a que

1 = su + tw

pela identidade de Bézout. Multiplicar ambos os lados por v fornece a relação:

v = suv + twv = sL + twv

Uma vez que w divide ambos os termos do lado direito, ele também deve dividir o lado esquerdo, v. Este resultado é conhecido como o lema de Euclides.[65] Especificamente, se um número primo divide L, então ele deve dividir pelo menos um fator de L. Inversamente, se um número w é coprimo de cada um de uma série de números a1, a2, ..., an, então w é também coprimo do seu produto, a1 × a2 × ... × an.[65]

O lema de Euclides é suficiente para provar que todo número possui uma fatoração única em números primos.[66] Para ver isto, assuma o contrário, que existem duas fatorações independentes de L em m e n fatores primos, respetivamente

L = p1p2...pm = q1q2...qn.

Como cada primo p divide L por hipótese, ele também deve dividir um dos fatores q; uma vez que cada q é também primo, deve verificar-se que p = q. Dividir iterativamente pelos fatores p mostra que cada p tem um correspondente igual q; as duas fatorações em primos são idênticas exceto pela sua ordem. A fatoração única de números em primos tem muitas aplicações em provas matemáticas, como mostrado abaixo.

Equações diofantinas lineares

"Uma linha diagonal correndo do canto superior esquerdo para o inferior direito. Quinze círculos estão espaçados a intervalos regulares ao longo da linha. Eixos de coordenadas x-y perpendiculares têm a sua origem no canto inferior esquerdo; a linha cruza o eixo y no canto superior esquerdo e cruza o eixo x no canto inferior direito."
Gráfico de uma equação diofantina linear, 9x + 12y = 483. As soluções são mostradas como círculos azuis.

As equações diofantinas são equações nas quais as soluções estão restritas a inteiros; receberam o nome do matemático alexandrino do século III Diofanto.[67] Uma equação diofantina linear típica procura inteiros x e y de tal modo que[68]

ax + by = c

onde a, b e c são inteiros dados. Isto pode ser escrito como uma equação para x na aritmética modular:

ax c \pmod b.

Seja g o máximo divisor comum de a e b. Ambos os termos em ax + by são divisíveis por g; portanto, c também deve ser divisível por g, ou a equação não terá soluções. Ao dividir ambos os lados por c/g, a equação pode ser reduzida à identidade de Bézout

sa + tb = g,

onde s e t podem ser encontrados pelo algoritmo de Euclides estendido.[69] Isto fornece uma solução para a equação diofantina, x1 = s (c/g) e y1 = t (c/g).

Em geral, uma equação diofantina linear não tem soluções, ou tem um número infinito de soluções.[70] Para encontrar o último caso, considere duas soluções, (x1, y1) e (x2, y2), onde

ax1 + by1 = c = ax2 + by2

ou equivalentemente

a(x1x2) = b(y2y1).

Portanto, a menor diferença entre duas soluções de x é b/g, ao passo que a menor diferença entre duas soluções de y é a/g. Assim, as soluções podem ser expressas como

x = x1bu/g
y = y1 + au/g.

Ao permitir que u varie sobre todos os inteiros possíveis, uma família infinita de soluções pode ser gerada a partir de uma única solução (x1, y1). Se as soluções forem obrigadas a ser inteiros positivos (x > 0, y > 0), apenas um número finito de soluções poderá ser possível. Esta restrição sobre as soluções aceitáveis permite que alguns sistemas de equações diofantinas com mais incógnitas do que equações tenham um número finito de soluções;[71] isto é impossível para um sistema de equações lineares quando as soluções podem ser qualquer número real (ver sistema subdeterminado).

Inversos multiplicativos e o algoritmo RSA

Um corpo finito é um conjunto de números com quatro operações generalizadas. As operações são chamadas de adição, subtração, multiplicação e divisão e têm as suas propriedades habituais, tais como comutatividade, associatividade e distributividade. Um exemplo de um corpo finito é o conjunto de 13 números {0, 1, 2, ..., 12} usando a aritmética modular. Neste corpo, os resultados de qualquer operação matemática (adição, subtração, multiplicação ou divisão) são reduzidos em módulo 13; isto é, múltiplos de 13 são adicionados ou subtraídos até que o resultado caia dentro do intervalo 012. Por exemplo, o resultado de 5 × 7 = 35 \pmod{13} = 9. Tais corpos finitos podem ser definidos para qualquer primo p; usando definições mais sofisticadas, também podem ser definidos para qualquer potência m de um primo pm. Os corpos finitos são frequentemente chamados de corpos de Galois e são abreviados como GF(p) ou GF(pm).

Num tal corpo com m números, cada elemento não-nulo a tem um único inverso multiplicativo modular, a−1, tal que aa−1 = a−1a ≡ 1 \pmod m. Este inverso pode ser encontrado resolvendo a equação de congruência ax ≡ 1 \pmod m,[72] ou a equação diofantina linear equivalente[73]

ax + my = 1.

Esta equação pode ser resolvida pelo algoritmo de Euclides, como descrito acima. Encontrar inversos multiplicativos é um passo essencial no algoritmo RSA, que é amplamente utilizado no comércio eletrônico; especificamente, a equação determina o inteiro usado para descriptografar a mensagem.[74] Embora o algoritmo RSA use anéis em vez de corpos, o algoritmo de Euclides ainda pode ser usado para encontrar um inverso multiplicativo quando este existir. O algoritmo de Euclides também tem outras aplicações em códigos de correção de erros; por exemplo, pode ser usado como uma alternativa ao algoritmo de Berlekamp-Massey para decodificar códigos BCH e Reed-Solomon, que se baseiam em corpos de Galois.[75]

Teorema chinês do resto

O algoritmo de Euclides também pode ser usado para resolver múltiplas equações diofantinas lineares.[76] Tais equações surgem no teorema chinês do resto, que descreve um método inovador para representar um número inteiro x. Em vez de representar um inteiro pelos seus algarismos, ele pode ser representado pelos seus restos xi módulo um conjunto de N números coprimos mi:[77]

O objetivo é determinar x a partir dos seus N restos xi. A solução é combinar as múltiplas equações numa única equação diofantina linear com um módulo M muito maior que é o produto de todos os módulos individuais mi, e definir Mi como

Assim, cada Mi é o produto de todos os módulos exceto mi. A solução depende de encontrar N novos números hi tais que

Com estes números hi, qualquer inteiro x pode ser reconstruído a partir dos seus restos xi pela equação

Uma vez que estes números hi são os inversos multiplicativos dos Mi, eles podem ser encontrados usando o algoritmo de Euclides, como descrito na subseção anterior.

Árvore de Stern-Brocot

O algoritmo de Euclides pode ser usado para organizar o conjunto de todos os números racionais positivos numa árvore de busca binária infinita, chamada de árvore de Stern-Brocot. O número 1 (expresso como a fração 1/1) é colocado na raiz da árvore, e a localização de qualquer outro número a/b pode ser encontrada computando mdc(a,b) utilizando a forma original do algoritmo de Euclides, na qual cada passo substitui o maior dos dois números dados pela sua diferença com o número menor (não o seu resto), parando quando dois números iguais são alcançados. Um passo do algoritmo de Euclides que substitui o primeiro dos dois números corresponde a um passo na árvore de um nó para o seu filho à direita, e um passo que substitui o segundo dos dois números corresponde a um passo na árvore de um nó para o seu filho à esquerda. A sequência de passos construída desta forma não depende de a/b ser dado na forma irredutível, e forma um caminho da raiz até um nó contendo o número a/b.[78] Este fato pode ser usado para provar que cada número racional positivo aparece exatamente uma vez nesta árvore.

Por exemplo, 3/4 pode ser encontrado começando na raiz, indo uma vez para a esquerda e depois duas vezes para a direita:

A árvore de Stern-Brocot, e as sequências de Stern-Brocot de ordem i para i = 1, 2, 3, 4

O algoritmo de Euclides tem quase a mesma relação com outra árvore binária sobre os números racionais, chamada de Árvore de Calkin-Wilf. A diferença é que o caminho é invertido: em vez de produzir um caminho da raiz da árvore até um alvo, produz um caminho do alvo até à raiz.

Frações contínuas

O algoritmo de Euclides tem uma relação estreita com as frações contínuas.[79] A sequência de equações pode ser escrita na forma

O último termo do lado direito é sempre igual ao inverso do lado esquerdo da equação seguinte. Assim, as duas primeiras equações podem ser combinadas para formar

A terceira equação pode ser usada para substituir o termo do denominador r1/r0, resultando em

A razão final de restos rk/rk−1 pode sempre ser substituída usando a equação seguinte na série, até à equação final. O resultado é uma fração contínua

No exemplo resolvido acima, o mdc(1071, 462) foi calculado, e os quocientes qk foram 2, 3 e 7, respetivamente. Portanto, a fração 1071/462 pode ser escrita como

o que pode ser confirmado por cálculo.

Algoritmos de fatoração

Calcular um máximo divisor comum é um passo essencial em vários algoritmos de fatoração de inteiros,[80] tais como o algoritmo rho de Pollard,[81] o algoritmo de Shor,[82] o método de fatoração de Dixon[83] e a fatoração de curva elíptica de Lenstra.[84] O algoritmo de Euclides pode ser usado para encontrar este MDC de forma eficiente. A fatoração com frações contínuas utiliza frações contínuas, as quais são determinadas com recurso ao algoritmo de Euclides.[85]

Eficiência algorítmica

"Um conjunto de linhas coloridas irradiando para fora a partir da origem de um sistema de coordenadas x-y. Cada linha corresponde a um conjunto de pares de números requerendo o mesmo número de passos no algoritmo de Euclides."
Número de passos no algoritmo de Euclides para mdc(x,y). Pontos mais claros (vermelho e amarelo) indicam relativamente poucos passos, ao passo que pontos mais escuros (violeta e azul) indicam mais passos. A maior área escura segue a linha y = Φx, onde Φ é a proporção áurea.

A eficiência computacional do algoritmo de Euclides foi estudada minuciosamente.[86] Esta eficiência pode ser descrita pelo número de passos de divisão que o algoritmo requer, multiplicado pelo custo computacional de cada passo. A primeira análise conhecida do algoritmo de Euclides é devida a A. A. L. Reynaud em 1811,[87] que mostrou que o número de passos de divisão na entrada (u, v) é limitado por v; mais tarde, ele melhorou isto para v/2 + 2. Posteriormente, em 1841, P. J. E. Finck mostrou[88] que o número de passos de divisão é no máximo 2 log2 v + 1, e logo o algoritmo de Euclides é executado em tempo polinomial no tamanho da entrada.[89] Émile Léger, em 1837, estudou o pior caso, que é quando as entradas são números de Fibonacci consecutivos.[89] A análise de Finck foi refinada por Gabriel Lamé em 1844,[90] que mostrou que o número de passos necessários para a conclusão nunca é mais do que cinco vezes o número h de dígitos na base 10 do número menor b.[91][92]

No modelo de custo uniforme (adequado para analisar a complexidade do cálculo do mdc em números que cabem numa única palavra de máquina), cada passo do algoritmo consome tempo constante, e a análise de Lamé implica que o tempo de execução total também é O(h). No entanto, num modelo de computação adequado para computação com números maiores, o custo computacional de uma única computação de resto no algoritmo pode ser tão grande quanto O(h2).[93] Neste caso, o tempo total para todos os passos do algoritmo pode ser analisado usando uma série telescópica, mostrando que também é O(h2). Técnicas algorítmicas modernas baseadas no algoritmo de Schönhage-Strassen para a multiplicação rápida de inteiros podem ser usadas para acelerar isto, levando a algoritmos quase lineares para o MDC.[94][95]

Número de passos

O número de passos para calcular o MDC de dois números naturais, a e b, pode ser denotado por T(a, b).[96] Se g for o MDC de a e b, então a = mg e b = ng para dois números coprimos m e n. Então

T(a, b) = T(m, n)

como pode ser visto dividindo todos os passos no algoritmo de Euclides por g.[97] Pelo mesmo argumento, o número de passos permanece o mesmo se a e b forem multiplicados por um fator comum w: T(a, b) = T(wa, wb). Portanto, o número de passos T pode variar dramaticamente entre pares vizinhos de números, tais como T(a, b) e T(a, b + 1), dependendo do tamanho dos dois MDCs.

A natureza recursiva do algoritmo de Euclides fornece outra equação

T(a, b) = 1 + T(b, r0) = 2 + T(r0, r1) = … = N + T(rN−2, rN−1) = N + 1

onde T(x, 0) = 0 por hipótese.[96]

Pior caso

Se o algoritmo de Euclides requerer N passos para um par de números naturais a > b > 0, os menores valores de a e b para os quais isto é verdade são os números de Fibonacci FN+2 e FN+1, respetivamente.[98] Mais precisamente, se o algoritmo de Euclides requer N passos para o par a > b, então tem-se a  FN+2 e b  FN+1. Isto pode ser demonstrado por indução.[99] Se N = 1, b divide a sem resto; os menores números naturais para os quais isto é verdade são b = 1 e a = 2, que são F2 e F3, respetivamente. Agora assuma que o resultado é válido para todos os valores de N até M  1. O primeiro passo do algoritmo de M passos é a = q0b + r0, e o algoritmo de Euclides requer M  1 passos para o par b > r0. Por hipótese de indução, tem-se b  FM+1 e r0  FM. Portanto, a = q0b + r0  b + r0  FM+1 + FM = FM+2, que é a desigualdade pretendida. Esta prova, publicada por Gabriel Lamé em 1844, representa o início da teoria da complexidade computacional,[100] e também a primeira aplicação prática dos números de Fibonacci.[98]

Este resultado é suficiente para mostrar que o número de passos no algoritmo de Euclides nunca pode ser superior a cinco vezes o número dos seus dígitos (base 10).[101] Pois se o algoritmo requer N passos, então b é maior ou igual a FN+1 que por sua vez é maior ou igual a φN−1, onde φ é a proporção áurea. Uma vez que b  φN−1, então N  1  logφb. Como log10φ > 1/5, (N  1)/5 < log10φ logφb = log10b. Assim, N  5 log10b. Deste modo, o algoritmo de Euclides necessita sempre de menos de O(h) divisões, onde h é o número de dígitos no número menor b.

Média

O número médio de passos dados pelo algoritmo de Euclides foi definido de três formas diferentes. A primeira definição é o tempo médio T(a) necessário para calcular o MDC de um dado número a e de um número natural menor b escolhido com igual probabilidade entre os inteiros 0 a a  1[96]

No entanto, visto que T(a, b) flutua dramaticamente de acordo com o MDC dos dois números, a função média T(a) é igualmente "ruidosa".[102]

Para reduzir este ruído, uma segunda média τ(a) é tomada sobre todos os números coprimos com a

Existem φ(a) inteiros coprimos menores que a, onde φ é a função totiente de Euler. Esta média tau cresce suavemente com a[103][104]

com o erro residual a ser da ordem a−(1/6)+ε, onde ε é infinitesimal. A constante C nesta fórmula é chamada de constante de Porter[105] e é igual a

onde γ é a constante de Euler-Mascheroni e ζ é a derivada da função zeta de Riemann.[106][107] O coeficiente principal (12/π2) ln 2 foi determinado por dois métodos independentes.[108][109]

Uma vez que a primeira média pode ser calculada a partir da média tau somando sobre os divisores d de a[110]

ela pode ser aproximada pela fórmula[111]

onde Λ(d) é a função de Mangoldt.[112]

Uma terceira média Y(n) é definida como o número médio de passos necessários quando tanto a quanto b são escolhidos aleatoriamente (com distribuição uniforme) de 1 a n[111]

A substituição da fórmula aproximada para T(a) nesta equação produz uma estimativa para Y(n)[113]

Custo computacional por passo

Em cada passo k do algoritmo de Euclides, o quociente qk e o resto rk são computados para um dado par de inteiros rk−2 e rk−1

rk−2 = qk rk−1 + rk.

O custo computacional por passo está associado principalmente em encontrar qk, uma vez que o resto rk pode ser calculado rapidamente a partir de rk−2, rk−1, e qk

rk = rk−2qk rk−1.

O custo computacional de dividir números de h-bits escala como O(h( + 1)), onde é o comprimento do quociente.[93]

Para efeito de comparação, o algoritmo original de Euclides baseado em subtração pode ser muito mais lento. Uma única divisão inteira é equivalente ao número q de subtrações do quociente. Se a razão entre a e b for muito grande, o quociente é grande e muitas subtrações serão necessárias. Por outro lado, foi mostrado que é muito provável que os quocientes sejam inteiros pequenos. A probabilidade de um dado quociente q é de aproximadamente ln |u/(u − 1)| onde u = (q + 1)2.[114] Para ilustração, a probabilidade de um quociente de 1, 2, 3 ou 4 é de sensivelmente 41,5%, 17,0%, 9,3% e 5,9%, respetivamente. Visto que a operação de subtração é mais rápida que a divisão, particularmente para números grandes,[115] o algoritmo de Euclides baseado em subtração é competitivo com a versão baseada em divisão.[116] Isto é explorado na versão binária do algoritmo de Euclides.[117]

A combinação do número estimado de passos com o custo computacional estimado por passo mostra que o algoritmo de Euclides cresce quadraticamente (h2) com o número médio de dígitos h nos dois números iniciais a e b. Seja h0, h1, ..., hN−1 representativo do número de dígitos nos sucessivos restos r0, r1, ..., rN−1. Uma vez que o número de passos N cresce linearmente com h, o tempo de execução é limitado por

Métodos alternativos

O algoritmo de Euclides é amplamente utilizado na prática, especialmente para números pequenos, devido à sua simplicidade.[118] Para comparação, a eficiência de alternativas ao algoritmo de Euclides pode ser determinada.

Uma abordagem ineficiente para encontrar o MDC de dois números naturais a e b é calcular todos os seus divisores comuns; o MDC é então o maior divisor comum. Os divisores comuns podem ser encontrados dividindo ambos os números por inteiros sucessivos de 2 até ao número menor b. O número de passos desta abordagem cresce linearmente com b, ou exponencialmente com o número de dígitos. Outra abordagem ineficiente é encontrar os fatores primos de um ou de ambos os números. Como notado acima, o MDC é igual ao produto dos fatores primos partilhados pelos dois números a e b.[8] Os métodos atuais de fatoração em primos também são ineficientes; muitos sistemas modernos de criptografia baseiam-se mesmo nessa ineficiência.[11]

O algoritmo binário do MDC é uma alternativa eficiente que substitui a divisão por operações mais rápidas ao explorar a representação binária utilizada pelos computadores.[119][120] No entanto, esta alternativa também escala como O(h²). Geralmente é mais rápido do que o algoritmo de Euclides em computadores reais, embora escale da mesma forma.[94] Pode-se obter eficiência adicional examinando apenas os dígitos iniciais dos dois números a e b.[121][122] O algoritmo binário pode ser estendido para outras bases (algoritmos k-ários),[123] com aumentos de velocidade de até cinco vezes.[124] O algoritmo do MDC de Lehmer usa o mesmo princípio geral do algoritmo binário para acelerar o cálculo do MDC em bases arbitrárias.

Uma abordagem recursiva para números inteiros muito grandes (com mais de 25 000 dígitos) leva a algoritmos de MDC de inteiros de tempo quase linear,[125] como os de Schönhage,[126][127] e Stehlé e Zimmermann.[128] Estes algoritmos exploram a forma da matriz 2×2 do algoritmo de Euclides dada acima. Estes métodos quase lineares escalam em geral como O(h log h2 log log h).[94][95]

Generalizações

Embora o algoritmo de Euclides seja usado para encontrar o máximo divisor comum de dois números naturais (inteiros positivos), ele pode ser generalizado para os números reais e para outros objetos matemáticos, tais como polinômios,[129] inteiros quadráticos[130] e quatérnios de Hurwitz.[131] Nestes últimos casos, o algoritmo de Euclides é usado para demonstrar a propriedade crucial da fatoração única, ou seja, que tais números podem ser fatorados de forma única em elementos irredutíveis, os análogos dos números primos. A fatoração única é essencial para muitas provas da teoria dos números.

Números racionais e reais

O algoritmo de Euclides pode ser aplicado a números reais, como descrito por Euclides no Livro 10 dos seus Elementos. O objetivo do algoritmo é identificar um número real g tal que dois números reais dados, a e b, sejam múltiplos inteiros dele: a = mg e b = ng, onde m e n são inteiros.[28] Esta identificação é equivalente a encontrar uma relação inteira entre os números reais a e b; isto é, determina inteiros s e t de tal modo que sa + tb = 0. Se tal equação for possível, a e b são chamados de comprimentos comensuráveis, caso contrário, são comprimentos incomensuráveis.[132][133]

O algoritmo de Euclides para números reais difere do seu homólogo inteiro em dois aspetos. Primeiro, os restos rk são números reais, embora os quocientes qk sejam inteiros como antes. Segundo, não é garantido que o algoritmo termine num número finito N de passos. Se terminar, a fração a/b é um número racional, isto é, a razão de dois inteiros

e pode ser escrita como uma fração contínua finita [q0; q1, q2, ..., qN]. Se o algoritmo não parar, a fração a/b é um número irracional e pode ser descrita por uma fração contínua infinita [q0; q1, q2, …].[134] Exemplos de frações contínuas infinitas são a proporção áurea φ = [1; 1, 1, ...] e a raiz quadrada de dois, 2 = [1; 2, 2, ...].[135] Quando aplicado a dois números reais arbitrários, é improvável que o algoritmo pare, uma vez que quase todas as razões a/b de dois números reais são irracionais.[136]

Uma fração contínua infinita pode ser truncada num passo k [q0; q1, q2, ..., qk] para produzir uma aproximação de a/b que melhora à medida que k aumenta. A aproximação é descrita por convergentes mk/nk; o numerador e os denominadores são coprimos e obedecem à relação de recorrência

onde m−1 = n−2 = 1 e m−2 = n−1 = 0 são os valores iniciais da recursão. A convergente mk/nk é a melhor aproximação por número racional de a/b com denominador nk:[137]

Polinômios

Polinômios numa única variável x podem ser adicionados, multiplicados e fatorados em polinômios irredutíveis, que são os análogos dos números primos para os inteiros. O polinômio máximo divisor comum g(x) de dois polinômios a(x) e b(x) é definido como o produto dos seus polinômios irredutíveis partilhados, o qual pode ser identificado usando o algoritmo de Euclides.[129] O procedimento básico é semelhante ao dos inteiros. A cada passo k, um polinômio quociente qk(x) e um polinômio resto rk(x) são identificados para satisfazer a equação recursiva

onde r−2(x) = a(x) e r−1(x) = b(x). Cada polinômio quociente é escolhido de tal forma que cada resto é zero ou possui um grau que é menor do que o grau do seu predecessor: grau[rk(x)] < grau[rk−1(x)]. Como o grau é um inteiro não-negativo, e visto que diminui a cada passo, o algoritmo de Euclides conclui num número finito de passos. O último resto não-nulo é o máximo divisor comum dos dois polinômios originais, a(x) e b(x).[138]

Por exemplo, considere os seguintes dois polinômios quárticos, que se fatoram cada um em dois polinômios quadráticos

Ao dividir a(x) por b(x), obtém-se um resto r0(x) = x3 + (2/3)x2 + (5/3)x − (2/3). No passo seguinte, b(x) é dividido por r0(x), produzindo um resto r1(x) = x2 + x + 2. Finalmente, dividir r0(x) por r1(x) produz um resto nulo, indicando que r1(x) é o polinômio máximo divisor comum de a(x) e b(x), o que é consistente com a sua fatoração.

Muitas das aplicações descritas acima para inteiros transitam para os polinômios.[139] O algoritmo de Euclides pode ser usado para resolver equações diofantinas lineares e problemas do resto chinês para polinômios; frações contínuas de polinômios também podem ser definidas.

O algoritmo de Euclides para polinômios tem outras aplicações, tais como as cadeias de Sturm, um método para contar os zeros de um polinômio que residem dentro de um dado intervalo real.[140] Isto, por sua vez, tem aplicações em várias áreas, como o critério de estabilidade de Routh-Hurwitz na teoria de controle.[141]

Por fim, os coeficientes dos polinômios não precisam de ser extraídos dos inteiros, números reais ou sequer dos números complexos. Por exemplo, os coeficientes podem ser extraídos de um corpo geral, como os corpos finitos GF(p) descritos acima. As conclusões correspondentes sobre o algoritmo de Euclides e as suas aplicações mantêm-se mesmo para tais polinômios.[129]

Inteiros gaussianos

"Um conjunto de pontos situado dentro de um círculo. O padrão de pontos tem simetria quádrupla, ou seja, rotações de 90 graus deixam o padrão inalterado. O padrão também pode ser espelhado em quatro linhas que passam pelo centro do círculo: os eixos vertical e horizontal e as duas linhas diagonais a ±45 graus."
Distribuição de primos gaussianos u + vi no plano complexo, com normas u2 + v2 menores que 500

Os inteiros gaussianos são números complexos da forma α = u + vi, onde u e v são inteiros ordinários[nota 2] e i é a raiz quadrada de menos um.[142] Ao definir um análogo do algoritmo de Euclides, pode-se demonstrar que os inteiros gaussianos são unicamente fatoráveis, pelo argumento acima.[43] Esta fatoração única é útil em muitas aplicações, tais como na derivação de todos os ternos pitagóricos ou na prova do teorema dos dois quadrados de Fermat.[142] Geralmente, o algoritmo de Euclides é conveniente em tais aplicações, mas não essencial; por exemplo, os teoremas podem ser frequentemente provados por outros argumentos.

O algoritmo de Euclides desenvolvido para dois inteiros gaussianos α e β é praticamente o mesmo que para os inteiros ordinários,[143] mas difere em dois aspetos. Como antes, definimos r−2 = α e r−1 = β, e a tarefa a cada passo k é identificar um quociente qk e um resto rk de tal modo que

onde cada resto é estritamente menor que o seu predecessor: . A primeira diferença é que os quocientes e restos são eles próprios inteiros gaussianos e, assim, são números complexos. Os quocientes qk são geralmente encontrados arredondando as partes real e complexa da razão exata (como o número complexo α/β) para os inteiros mais próximos.[143] A segunda diferença reside na necessidade de definir como é que um resto complexo pode ser "menor" do que outro. Para fazer isto, uma função de norma f(u + vi) = u2 + v2 é definida, convertendo cada inteiro gaussiano u + vi num inteiro ordinário. Após cada passo k do algoritmo de Euclides, a norma do resto f(rk) é menor do que a norma do resto anterior, f(rk−1). Uma vez que a norma é um inteiro não-negativo e diminui a cada passo, o algoritmo de Euclides para os inteiros gaussianos termina num número finito de passos.[144] O último resto não-nulo é mdc(α, β), o inteiro gaussiano de maior norma que divide tanto α quanto β; este é único a menos de multiplicação por uma unidade, ±1 ou ±i.[145]

Muitas das outras aplicações do algoritmo de Euclides transitam para os inteiros gaussianos. Por exemplo, ele pode ser usado para resolver equações diofantinas lineares e problemas do resto chinês para inteiros gaussianos;[146] frações contínuas de inteiros gaussianos também podem ser definidas.[143]

Domínios euclidianos

Um conjunto de elementos sob duas operações binárias, denotadas como adição e multiplicação, é chamado de domínio euclidiano se formar um anel comutativo R e, grosso modo, se um algoritmo de Euclides generalizado puder ser realizado sobre eles.[147][148] As duas operações de um tal anel não precisam de ser a adição e a multiplicação da aritmética ordinária; em vez disso, podem ser mais gerais, como as operações de um grupo matemático ou de um monoide. Ainda assim, estas operações gerais devem respeitar muitas das leis que governam a aritmética ordinária, tais como a comutatividade, a associatividade e a distributividade.

O algoritmo de Euclides generalizado requer uma função euclidiana, isto é, um mapeamento f de R no conjunto dos inteiros não-negativos tal que, para quaisquer dois elementos não-nulos a e b em R, existam q e r em R de tal modo que a = qb + r e f(r) < f(b).[149] Exemplos de tais mapeamentos são o valor absoluto para os inteiros, o grau para polinômios univariados (de uma variável) e a norma para os inteiros gaussianos acima.[150][151] O princípio básico é que cada passo do algoritmo reduz f inexoravelmente; consequentemente, se f pode ser reduzida apenas um número finito de vezes, o algoritmo deve parar num número finito de passos. Este princípio baseia-se na propriedade da boa ordenação dos inteiros não-negativos, que assevera que todo conjunto não vazio de inteiros não-negativos tem um menor membro.[152]

O teorema fundamental da aritmética aplica-se a qualquer domínio euclidiano: Qualquer número de um domínio euclidiano pode ser fatorado de forma única em elementos irredutíveis. Qualquer domínio euclidiano é um domínio de fatoração única (DFU), embora o inverso não seja verdadeiro.[152] Os domínios euclidianos e os DFUs são subclasses dos domínios MDC, domínios nos quais um máximo divisor comum de dois números existe sempre.[153] Por outras palavras, pode existir um máximo divisor comum (para todos os pares de elementos num domínio), embora possa não ser possível encontrá-lo usando um algoritmo de Euclides. Um domínio euclidiano é sempre um domínio de ideais principais (DIP), um domínio de integridade no qual todo ideal é um ideal principal.[154] Novamente, o inverso não é verdadeiro: nem todo DIP é um domínio euclidiano.

A fatoração única dos domínios euclidianos é útil em muitas aplicações. Por exemplo, a fatoração única dos inteiros gaussianos é conveniente para derivar fórmulas para todos os ternos pitagóricos e para provar o teorema dos dois quadrados de Fermat.[142] A fatoração única também foi um elemento-chave numa tentativa de prova do Último Teorema de Fermat publicada em 1847 por Gabriel Lamé, o mesmo matemático que analisou a eficiência do algoritmo de Euclides, baseada numa sugestão de Joseph Liouville.[155] A abordagem de Lamé exigia a fatoração única de números da forma x + ωy, onde x e y são inteiros, e ω = e2/n é uma n-ésima raiz de 1, isto é, ωn = 1. Embora esta abordagem seja bem-sucedida para alguns valores de n (como n = 3, os inteiros de Eisenstein), em geral tais números não se fatoram de forma única. Esta falha da fatoração única nalguns corpos ciclotômicos levou Ernst Kummer ao conceito de números ideais e, mais tarde, Richard Dedekind aos ideais.[156]

Fatoração única de inteiros quadráticos

"Um conjunto de pontos situados dentro de um círculo. O padrão de pontos tem simetria sêxtupla, ou seja, rotações de 60 graus deixam o padrão inalterado. O padrão também pode ser espelhado em torno de seis linhas que passam pelo centro do círculo: os eixos vertical e horizontal e as quatro linhas diagonais a ±30 e ±60 graus."
Distribuição dos primos de Eisenstein u + no plano complexo, com normas menores que 500. O número ω é uma raiz cúbica de 1.

Os anéis de inteiros quadráticos são úteis para ilustrar os domínios euclidianos. Os inteiros quadráticos são generalizações dos inteiros gaussianos nas quais a unidade imaginária i é substituída por um número ω. Assim, eles têm a forma u + , onde u e v são inteiros e ω tem uma de duas formas, dependendo de um parâmetro D. Se D não for igual a um múltiplo de quatro mais um, então

Se, no entanto, D for igual a um múltiplo de quatro mais um, então

Se a função f corresponder a uma função de norma, como a usada para ordenar os inteiros gaussianos acima, então o domínio é conhecido como norma-euclidiano. Os anéis norma-euclidianos de inteiros quadráticos são exatamente aqueles onde D é um dos valores −11, −7, −3, −2, −1, 2, 3, 5, 6, 7, 11, 13, 17, 19, 21, 29, 33, 37, 41, 57 ou 73.[157][158] Os casos D = −1 e D = −3 produzem os inteiros gaussianos e os inteiros de Eisenstein, respetivamente.

Se a f for permitido ser qualquer função euclidiana, então a lista de possíveis valores de D para os quais o domínio é euclidiano ainda não é conhecida.[159] O primeiro exemplo de um domínio euclidiano que não era norma-euclidiano (com D = 69) foi publicado em 1994.[159] Em 1973, Weinberger provou que um anel de inteiros quadráticos com D > 0 é euclidiano se, e somente se, for um domínio de ideais principais, partindo do princípio que a hipótese generalizada de Riemann é válida.[130]

Anéis não comutativos

O algoritmo de Euclides pode ser aplicado a alguns anéis não comutativos, tais como o conjunto de quatérnios de Hurwitz.[131][160] Sejam α e β representantes de dois elementos de um tal anel. Eles possuem um divisor comum à direita δ se α = ξδ e β = ηδ para alguma escolha de ξ e η no anel. Similarmente, eles possuem um divisor comum à esquerda se α = e β = para alguma escolha de ξ e η no anel. Visto que a multiplicação não é comutativa, existem duas versões do algoritmo de Euclides, uma para divisores à direita e outra para divisores à esquerda.[131][160] Escolhendo os divisores à direita, o primeiro passo para encontrar o mdc(α, β) pelo algoritmo de Euclides pode ser escrito

onde ψ0 representa o quociente e ρ0 o resto. Aqui o quociente e o resto são escolhidos de modo a que (se for não-nulo) o resto cumpra N(ρ0) < N(β) para uma "função euclidiana" N definida de forma análoga às funções euclidianas dos domínios euclidianos no caso não comutativo.[160] Esta equação mostra que qualquer divisor comum à direita de α e β é igualmente um divisor comum do resto ρ0. A equação análoga para os divisores à esquerda seria

Com qualquer uma das escolhas, o processo é repetido como acima até que o maior divisor comum à direita ou à esquerda seja identificado. Assim como no domínio euclidiano, o "tamanho" do resto ρ0 (formalmente, a sua função euclidiana ou "norma") deve ser estritamente menor que β, e deve existir apenas um número finito de possíveis tamanhos para ρ0, de modo que é garantido que o algoritmo termine.[161]

Muitos resultados para o MDC transitam para os números não comutativos. Por exemplo, a identidade de Bézout afirma que o mdc(α, β) à direita pode ser expresso como uma combinação linear de α e β.[162] Por outras palavras, existem números σ e τ tais que

A identidade análoga para o MDC à esquerda é praticamente a mesma:

A identidade de Bézout pode ser usada para resolver equações diofantinas. Por exemplo, uma das provas padrão do teorema dos quatro quadrados de Lagrange, de que todo número inteiro positivo pode ser representado como uma soma de quatro quadrados, baseia-se nos MDCs de quatérnios desta forma.[161]

Ver também

  • Algoritmo de Euclides estendido

Notas

  1. Alguns livros didáticos amplamente utilizados, como Topics in Algebra de I. N. Herstein e Algebra de Serge Lang, usam o termo "algoritmo de Euclides" para se referir à divisão euclidiana.
  2. A expressão "inteiro ordinário" é habitualmente usada para distinguir os inteiros usuais dos inteiros gaussianos e, mais geralmente, dos inteiros algébricos.

Referências

  1. Lamé, Gabriel (1844). «Note sur la limite du nombre des divisions dans la recherche du plus grand commun diviseur entre deux nombres entiers». Comptes Rendus des Séances de l'Académie des Sciences (em francês). 19: 867–870
  2. Shallit, Jeffrey (1 de novembro de 1994). «Origins of the analysis of the Euclidean algorithm». Historia Mathematica (em inglês). 21 (4): 401–419. ISSN 0315-0860. doi:10.1006/hmat.1994.1031
  3. Stark 1978, p. 16
  4. Stark 1978, p. 21
  5. LeVeque 1996, p. 32
  6. LeVeque 1996, p. 31
  7. Grossman, J. W. (1990). Discrete Mathematics. Nova Iorque: Macmillan. p. 213. ISBN 0-02-348331-8
  8. 1 2 Schroeder 2005, pp. 21–22
  9. Schroeder 2005, p. 19
  10. Ogilvy, C. S.; Anderson, J. T. (1966). Excursions in number theory. Nova Iorque: Oxford University Press. pp. 27–29
  11. 1 2 Schroeder 2005, pp. 216–219
  12. 1 2 LeVeque 1996, p. 33
  13. Stark 1978, p. 25
  14. Ore 1948, pp. 47–48
  15. Stark 1978, p. 18
  16. Stark 1978, pp. 16–20
  17. Knuth 1997, p. 320
  18. Lovász, L.; Pelikán, J.; Vesztergombi, K. (2003). Discrete Mathematics: Elementary and Beyond. Nova Iorque: Springer-Verlag. pp. 100–101. ISBN 0-387-95584-4
  19. Kimberling, C. (1983). «A Visual Euclidean Algorithm». Mathematics Teacher. 76: 108–109
  20. Dummit, David S.; Foote, Richard M. (2004). Abstract Algebra. [S.l.]: John Wiley & Sons, Inc. pp. 270–271. ISBN 978-0-471-43334-7
  21. Knuth 1997, pp. 319–320
  22. Knuth 1997, pp. 318–319
  23. Stillwell 1997, p. 14
  24. 1 2 Ore 1948, p. 43
  25. 1 2 Stewart, B. M. (1964). Theory of Numbers 2nd ed. Nova Iorque: Macmillan. pp. 43–44
  26. Lazard, D. (1977). «Le meilleur algorithme d'Euclide pour K[X] et Z». Comptes Rendus de l'Académie des Sciences (em francês). 284: 1–4
  27. 1 2 Knuth 1997, p. 318
  28. 1 2 Weil, A. (1983). Number Theory. Boston: Birkhäuser. pp. 4–6. ISBN 0-8176-3141-0
  29. Jones, A. (1994). «Greek mathematics to AD 300». Companion encyclopedia of the history and philosophy of the mathematical sciences. Nova Iorque: Routledge. pp. 46–48. ISBN 0-415-09238-8
  30. van der Waerden, B. L. (1954). Science Awakening. Col: translated by Arnold Dresden. Groningen: P. Noordhoff Ltd. pp. 114–115
  31. von Fritz, K. (1945). «The Discovery of Incommensurability by Hippasus of Metapontum». Annals of Mathematics. 46 (2): 242–264. JSTOR 1969021. doi:10.2307/1969021
  32. T. L. Heath (1949). Mathematics in Aristotle (em inglês). [S.l.]: Oxford University Press. pp. 80–83
  33. Fowler, D. H. (1987). The Mathematics of Plato's Academy: A New Reconstruction. Oxford: Oxford University Press. pp. 31–66. ISBN 0-19-853912-6
  34. Becker, O. (1933). «Eudoxus-Studien I. Eine voreuklidische Proportionslehre und ihre Spuren bei Aristoteles und Euklid». Quellen und Studien zur Geschichte der Mathematik B. 2: 311–333
  35. Brezinski, Claude (1991). History of continued fractions and Padé approximants. Col: Springer Series in Computational Mathematics. 12. [S.l.]: Springer-Verlag, Berlin. p. 6. ISBN 3-540-15286-5. doi:10.1007/978-3-642-58169-4
  36. 1 2 Stillwell 1997, p. 31
  37. 1 2 Tattersall 2005, p. 70
  38. Rosen 2000, pp. 86–87
  39. Ore 1948, pp. 247–248
  40. Tattersall 2005, pp. 72, 184–185
  41. Saunderson, Nicholas (1740). The Elements of Algebra in Ten Books. [S.l.]: University of Cambridge Press. Consultado em 1 de novembro de 2016
  42. Tattersall 2005, pp. 72–76
  43. 1 2 Gauss, C. F. (1832). «Theoria residuorum biquadraticorum». Comm. Soc. Reg. Sci. Gött. Rec. 4 Reimpresso em Gauss, C. F. (2011). «Theoria residuorum biquadraticorum commentatio prima». Werke. 2. [S.l.]: Cambridge Univ. Press. pp. 65–92. ISBN 9781139058230. doi:10.1017/CBO9781139058230.004 e Gauss, C. F. (2011). «Theoria residuorum biquadraticorum commentatio secunda». Werke. 2. [S.l.]: Cambridge Univ. Press. pp. 93–148. ISBN 9781139058230. doi:10.1017/CBO9781139058230.005
  44. Stillwell 1997, pp. 31–32
  45. Lejeune Dirichlet 1894, pp. 29–31
  46. Richard Dedekind em Lejeune Dirichlet 1894, Suplemento XI
  47. Stillwell 2003, pp. 41–42
  48. Sturm, C. (1829). «Mémoire sur la résolution des équations numériques». Bull. Des sciences de Férussac (em francês). 11: 419–422
  49. Ferguson, H. R. P.; Forcade, R. W. (1979). «Generalization of the Euclidean algorithm for real numbers to all dimensions higher than two». Bulletin of the American Mathematical Society. New Series. 1 (6): 912–914. doi:10.1090/S0273-0979-1979-14691-3
  50. Peterson, I. (12 de agosto de 2002). «Jazzing Up Euclid's Algorithm». ScienceNews. Consultado em 7 de abril de 2009. Cópia arquivada em 16 de abril de 2009
  51. Cipra, Barry Arthur (16 de maio de 2000). «The Best of the 20th Century: Editors Name Top 10 Algorithms» (PDF). Society for Industrial and Applied Mathematics. SIAM News. 33 (4). Consultado em 19 de julho de 2016. Cópia arquivada (PDF) em 22 de setembro de 2016
  52. Cole, A. J.; Davie, A. J. T. (1969). «A game based on the Euclidean algorithm and a winning strategy for it». Math. Gaz. 53 (386): 354–357. JSTOR 3612461. doi:10.2307/3612461
  53. Spitznagel, E. L. (1973). «Properties of a game based on Euclid's algorithm». Math. Mag. 46 (2): 87–92. JSTOR 2689037. doi:10.2307/2689037
  54. Rosen 2000, p. 95
  55. Roberts, J. (1977). Elementary Number Theory: A Problem Oriented Approach. Cambridge, MA: MIT Press. pp. 1–8. ISBN 0-262-68028-9
  56. Jones, G. A.; Jones, J. M. (1998). «Bezout's Identity». Elementary Number Theory. Nova Iorque: Springer-Verlag. pp. 7–11
  57. Rosen 2000, p. 81
  58. Cohn 1980, p. 104
  59. Rosen 2000, p. 91
  60. Schroeder 2005, p. 23
  61. Rosen 2000, pp. 90–93
  62. 1 2 Koshy, T. (2002). Elementary Number Theory with Applications. Burlington, MA: Harcourt/Academic Press. pp. 167–169. ISBN 0-12-421171-2
  63. Bach, E.; Shallit, J. (1996). Algorithmic number theory. Cambridge, MA: MIT Press. pp. 70–73. ISBN 0-262-02405-5
  64. Stark 1978, pp. 26–36
  65. 1 2 Ore 1948, p. 44
  66. Stark 1978, pp. 281–292
  67. Rosen 2000, pp. 119–125
  68. Schroeder 2005, pp. 106–107
  69. Schroeder 2005, pp. 108–109
  70. Rosen 2000, pp. 120–121
  71. Stark 1978, p. 47
  72. Schroeder 2005, pp. 107–109
  73. Stillwell 1997, pp. 186–187
  74. Schroeder 2005, p. 134
  75. Moon, T. K. (2005). Error Correction Coding: Mathematical Methods and Algorithms. [S.l.]: John Wiley and Sons. p. 266. ISBN 0-471-64800-0
  76. Rosen 2000, pp. 143–170
  77. Schroeder 2005, pp. 194–195
  78. Graham, R.; Knuth, D. E.; Patashnik, O. (1989). Concrete mathematics. [S.l.]: Addison-Wesley. p. 123
  79. Vinogradov, I. M. (1954). Elements of Number Theory. Nova Iorque: Dover. pp. 3–13
  80. Crandall & Pomerance 2001, pp. 225–349
  81. Knuth 1997, pp. 369–371
  82. Shor, P. W. (1997). «Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer». SIAM Journal on Scientific and Statistical Computing. 26 (5): 1484–1509. Bibcode:1995quant.ph..8027S. arXiv:quant-ph/9508027Acessível livremente. doi:10.1137/s0097539795293172
  83. Dixon, J. D. (1981). «Asymptotically fast factorization of integers». Math. Comput. 36 (153): 255–260. JSTOR 2007743. doi:10.2307/2007743Acessível livremente
  84. Lenstra, H. W. Jr. (1987). «Factoring integers with elliptic curves». Annals of Mathematics. 126 (3): 649–673. JSTOR 1971363. doi:10.2307/1971363. hdl:1887/2140Acessível livremente
  85. Knuth 1997, pp. 380–384
  86. Knuth 1997, pp. 339–364
  87. Reynaud, A.-A.-L. (1811). Traité d'arithmétique à l'usage des élèves qui se destinent à l'École Polytechnique 6th ed. Paris: Courcier. p. Nota 60, p. 34 Conforme citado por Shallit (1994).
  88. Finck, P.-J.-E. (1841). Traité élémentaire d'arithmétique à l'usage des candidats aux écoles spéciales (em francês). [S.l.]: Derivaux
  89. 1 2 Shallit 1994.
  90. Lamé, G. (1844). «Note sur la limite du nombre des divisions dans la recherche du plus grand commun diviseur entre deux nombres entiers». Comptes Rendus de l'Académie des Sciences (em francês). 19: 867–870
  91. Grossman, H. (1924). «On the Number of Divisions in Finding a G.C.D». The American Mathematical Monthly. 31 (9): 443. JSTOR 2298146. doi:10.2307/2298146
  92. Honsberger, R. (1976). Mathematical Gems II. [S.l.]: The Mathematical Association of America. pp. 54–57. ISBN 0-88385-302-7
  93. 1 2 Knuth 1997, pp. 257–261
  94. 1 2 3 Crandall & Pomerance 2001, pp. 77–79, 81–85, 425–431
  95. 1 2 Möller, N. (2008). «On Schönhage's algorithm and subquadratic integer gcd computation» (PDF). Mathematics of Computation. 77 (261): 589–607. Bibcode:2008MaCom..77..589M. doi:10.1090/S0025-5718-07-02017-0Acessível livremente. Consultado em 24 de março de 2009. Cópia arquivada (PDF) em 21 de agosto de 2010
  96. 1 2 3 Knuth 1997, p. 344
  97. Ore 1948, p. 45
  98. 1 2 Knuth 1997, p. 343
  99. Mollin 2008, p. 21
  100. LeVeque 1996, p. 35
  101. Mollin 2008, pp. 21–22
  102. Knuth 1997, p. 353
  103. Knuth 1997, p. 357
  104. Tonkov, T. (1974). «On the average length of finite continued fractions». Acta Arithmetica. 26 (1): 47–57. doi:10.4064/aa-26-1-47-57Acessível livremente
  105. Knuth, Donald E. (1976). «Evaluation of Porter's constant». Computers & Mathematics with Applications. 2 (2): 137–139. doi:10.1016/0898-1221(76)90025-0Acessível livremente
  106. Porter, J. W. (1975). «On a Theorem of Heilbronn». Mathematika. 22 (1): 20–28. doi:10.1112/S0025579300004459
  107. Knuth, D. E. (1976). «Evaluation of Porter's Constant». Computers and Mathematics with Applications. 2 (2): 137–139. doi:10.1016/0898-1221(76)90025-0Acessível livremente
  108. Dixon, J. D. (1970). «The Number of Steps in the Euclidean Algorithm». J. Number Theory. 2 (4): 414–422. Bibcode:1970JNT.....2..414D. doi:10.1016/0022-314X(70)90044-2Acessível livremente
  109. Heilbronn, H. A. (1969). «On the Average Length of a Class of Finite Continued Fractions». In: Paul Turán. Number Theory and Analysis. Nova Iorque: Plenum. pp. 87–96
  110. Knuth 1997, p. 354
  111. 1 2 Norton, G. H. (1990). «On the Asymptotic Analysis of the Euclidean Algorithm». Journal of Symbolic Computation. 10 (1): 53–58. doi:10.1016/S0747-7171(08)80036-3Acessível livremente
  112. Knuth 1997, p. 355
  113. Knuth 1997, p. 356
  114. Knuth 1997, p. 352
  115. Wagon, S. (1999). Mathematica in Action. Nova Iorque: Springer-Verlag. pp. 335–336. ISBN 0-387-98252-3
  116. Cohen 1993, p. 14
  117. Cohen 1993, pp. 14–15, 17–18
  118. Sorenson, Jonathan P. (2004). «An analysis of the generalized binary GCD algorithm». High primes and misdemeanours: lectures in honour of the 60th birthday of Hugh Cowie Williams. Col: Fields Institute Communications. 41. Providence, RI: American Mathematical Society. pp. 327–340. ISBN 9780821887592. The algorithms that are used the most in practice today [for computing greatest common divisors] are probably the binary algorithm and Euclid's algorithm for smaller numbers, and either Lehmer's algorithm or Lebealean's version of the k-ary GCD algorithm for larger numbers.
  119. Knuth 1997, pp. 321–323
  120. Stein, J. (1967). «Computational problems associated with Racah algebra». Journal of Computational Physics. 1 (3): 397–405. Bibcode:1967JCoPh...1..397S. doi:10.1016/0021-9991(67)90047-2
  121. Knuth 1997, p. 328
  122. Lehmer, D. H. (1938). «Euclid's Algorithm for Large Numbers». The American Mathematical Monthly. 45 (4): 227–233. JSTOR 2302607. doi:10.2307/2302607
  123. Sorenson, J. (1994). «Two fast GCD algorithms». J. Algorithms. 16 (1): 110–144. doi:10.1006/jagm.1994.1006
  124. Weber, K. (1995). «The accelerated GCD algorithm». ACM Trans. Math. Softw. 21 (1): 111–122. doi:10.1145/200979.201042Acessível livremente
  125. Aho, A.; Hopcroft, J.; Ullman, J. (1974). The Design and Analysis of Computer Algorithms. Nova Iorque: Addison–Wesley. pp. 300–310. ISBN 0-201-00029-6
  126. Schönhage, A. (1971). «Schnelle Berechnung von Kettenbruchentwicklungen». Acta Informatica (em alemão). 1 (2): 139–144. doi:10.1007/BF00289520
  127. Cesari, G. (1998). «Parallel implementation of Schönhage's integer GCD algorithm». In: G. Buhler. Algorithmic Number Theory: Proc. ANTS-III, Portland, OR. Col: Lecture Notes in Computer Science. 1423. Nova Iorque: Springer-Verlag. pp. 64–76
  128. Stehlé, D.; Zimmermann, P. (2005). «Gal's accurate tables method revisited». Proceedings of the 17th IEEE Symposium on Computer Arithmetic (ARITH-17). Los Alamitos, CA: IEEE Computer Society Press
  129. 1 2 3 Lang, S. (1984). Algebra 2nd ed. Menlo Park, CA: Addison–Wesley. pp. 190–194. ISBN 0-201-05487-6
  130. 1 2 Weinberger, P. (1973). «On Euclidean rings of algebraic integers». Providence, Rhode Island. Proc. Sympos. Pure Math. Proceedings of Symposia in Pure Mathematics. 24: 321–332. ISBN 9780821814246. doi:10.1090/pspum/024/0337902
  131. 1 2 3 Stillwell 2003, pp. 151–152
  132. Boyer, C. B.; Merzbach, U. C. (1991). A History of Mathematics 2nd ed. Nova Iorque: Wiley. pp. 116–117. ISBN 0-471-54397-7
  133. Cajori, F (1894). A History of Mathematics. Nova Iorque: Macmillan. p. 70 Reimpresso, Dover Publications, 2004, ISBN 0-486-43874-0
  134. Joux, Antoine (2009). Algorithmic Cryptanalysis. [S.l.]: CRC Press. p. 33. ISBN 9781420070033
  135. Fuks, D. B.; Tabachnikov, Serge (2007). Mathematical Omnibus: Thirty Lectures on Classic Mathematics. [S.l.]: American Mathematical Society. p. 13. ISBN 9780821843161
  136. Darling, David (2004). «Khintchine's constant». The Universal Book of Mathematics: From Abracadabra to Zeno's Paradoxes. [S.l.]: John Wiley & Sons. p. 175. ISBN 9780471667001
  137. Williams, Colin P. (2010). Explorations in Quantum Computing. [S.l.]: Springer. pp. 277–278. ISBN 9781846288876
  138. Cox, Little & O'Shea 1997, pp. 37–46
  139. Schroeder 2005, pp. 254–259
  140. Grattan-Guinness, Ivor (1990). Convolutions in French Mathematics, 1800-1840: From the Calculus and Mechanics to Mathematical Analysis and Mathematical Physics. Volume II: The Turns. Col: Science Networks: Historical Studies. 3. Basel, Boston, Berlin: Birkhäuser. p. 1148. ISBN 9783764322380. Our subject here is the 'Sturm sequence' of functions defined from a function and its derivative by means of Euclid's algorithm, in order to calculate the number of real roots of a polynomial within a given interval
  141. Hairer, Ernst; Nørsett, Syvert P.; Wanner, Gerhard (1993). «The Routh–Hurwitz Criterion». Solving Ordinary Differential Equations I: Nonstiff Problems. Col: Springer Series in Computational Mathematics. 8 2nd ed. [S.l.]: Springer. pp. 81ff. ISBN 9783540566700
  142. 1 2 3 Stillwell 2003, pp. 101–116
  143. 1 2 3 Hensley, Doug (2006). Continued Fractions. [S.l.]: World Scientific. p. 26. ISBN 9789812564771
  144. Dedekind, Richard (1996). Theory of Algebraic Integers. Col: Cambridge Mathematical Library. [S.l.]: Cambridge University Press. pp. 22–24. ISBN 9780521565189
  145. Johnston, Bernard L.; Richman, Fred (1997). Numbers and Symmetry: An Introduction to Algebra. [S.l.]: CRC Press. p. 44. ISBN 9780849303012
  146. William W. Adams; Larry Joel Goldstein (1976). Introduction to Number Theory (em inglês). [S.l.]: Prentice-Hall. p. 205. ISBN 9780134912820. State and prove an analogue of the Chinese remainder theorem for the Gaussian integers.
  147. Stark 1978, p. 290
  148. Cohn 1980, pp. 104–105
  149. Lauritzen, Niels (2003). Concrete Abstract Algebra: From Numbers to Gröbner Bases. [S.l.]: Cambridge University Press. p. 130. ISBN 9780521534109
  150. Lauritzen (2003), p. 132
  151. Lauritzen (2003), p. 161
  152. 1 2 David Sharpe (1987). Rings and Factorization (em inglês). [S.l.]: Cambridge University Press. p. 55. ISBN 9780521337182
  153. Sharpe (1987), p. 52
  154. Lauritzen (2003), p. 131
  155. Lamé, G. (1847). «Mémoire sur la résolution, en nombres complexes, de l'équation An + Bn + Cn = 0». J. Math. Pures Appl. (em francês). 12: 172–184
  156. Edwards, H. (2000). Fermat's last theorem: a genetic introduction to algebraic number theory. [S.l.]: Springer. p. 76
  157. Cohn 1980, pp. 104–110
  158. LeVeque, W. J. (2002) [1956]. Topics in Number Theory, Volumes I and II. Nova Iorque: Dover Publications. pp. II:57,81. ISBN 978-0-486-42539-9
  159. 1 2 Clark, D. A. (1994). «A quadratic field which is Euclidean but not norm-Euclidean». Manuscripta Mathematica. 83 (1): 327–330. doi:10.1007/BF02567617Acessível livremente
  160. 1 2 3 Bueso, Gómez-Torrecillas & Verschoren (2003); consulte pp. 37-38 para extensões não comutativas do algoritmo de Euclides e o Corolário 4.35, p. 40, para mais exemplos de anéis não comutativos aos quais se aplicam.
  161. 1 2 Giuliana Davidoff; Peter Sarnak; Alain Valette (2003). «2.6 The Arithmetic of Integer Quaternions». Elementary Number Theory, Group Theory and Ramanujan Graphs. Col: London Mathematical Society Student Texts (em inglês). 55. [S.l.]: Cambridge University Press. pp. 59–70. ISBN 9780521531436
  162. Ribenboim, Paulo (2001). Classical Theory of Algebraic Numbers. Col: Universitext. [S.l.]: Springer-Verlag. p. 104. ISBN 9780387950709

Bibliografia recomendada

Leitura adicional