Torna alle sfide
Facile 0 risolte 0% di accettazione

Massimo Comun Divisore

Trova il numero più grande che divide entrambi i valori.

Cosa imparerai

  • Applicare l'algoritmo di Euclide con i resti
  • Trasformare una regola matematica in un ciclo
  • Capire perché l'algoritmo è veloce

Problema

Restituisci il massimo comun divisore di a e b. L'algoritmo di Euclide sostituisce ripetutamente (a, b) con (b, a mod b) finché b è 0.

Implementa gcd(a, b).

Input

a: Il primo numero. b: Il secondo numero.

Output

Restituisci gcd(a, b). gcd(0, 0) è 0.

Vincoli

0 ≤ a, b ≤ 10¹⁸

Esempi

Esempio 1
Input:
a = 48
b = 18

Output atteso:
expected = 6
Input:
long long a = 48;
long long b = 18;

Output atteso:
long long expected = 6;
Input:
long a = 48;
long b = 18;

Output atteso:
long expected = 6;

Spiegazione

48 mod 18 = 12, 18 mod 12 = 6, 12 mod 6 = 0, quindi la risposta è 6.

Esempio 2
Input:
a = 17
b = 5

Output atteso:
expected = 1
Input:
long long a = 17;
long long b = 5;

Output atteso:
long long expected = 1;
Input:
long a = 17;
long b = 5;

Output atteso:
long expected = 1;

Spiegazione

17 e 5 non hanno fattori comuni oltre a 1.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Il gcd non cambia se sostituisci la coppia con il passo del resto.

Suggerimento 2

Continua a scambiare il ruolo dei due numeri finché il secondo non diventa zero.

Suggerimento 3

Assicurati di gestire il caso in cui entrambi gli input siano zero.

Complessità attesa

tempo O(log min(a, b)), spazio aggiuntivo O(1)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.