0410 - CMMDC 2

De la Universitas MediaWiki

Cerinţa

Se dă un număr natural n. Acest număr se “împarte” în alte două numere a și b, astfel: a este format din cifrele din prima jumătate a lui n, b este format din cifrele din a doua jumătate a lui n. Dacă n are număr impar de cifre, cifra din mijloc se ignoră. De exemplu, dacă n=9183792, atunci a=918, iar b=792. Să se determine cel mai mare divizor comun al lui a și b.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieşire

Programul afișează pe ecran numărul cmmdc, reprezentând valoarea cerută.

Restricții și precizări

  • n ∈ Ν
  • 0 ⩽ n ⩽ 1.000.000.000

Exemplu1

Intrare
9183792
Ieșire
Datele de intrare corespund restricțiilor impuse.
18

Exemplu2

Intrare
2847956
Ieșire
Datele de intrare corespund restricțiilor impuse.
4

Rezolvare

def validare_date(numar):
    flag = False
    if numar.isdigit():
        if 10 <= int(numar) <= 1_000_000_000:
            flag = True
    return flag


def CMD(numar1, numar2):
    while numar2:
        r = numar1 % numar2
        numar1, numar2 = numar2, r
    cmmdc = numar1
    return cmmdc


def cel_mai_mare_divizor(numar):
    n = str(numar)
    if len(n) % 2 == 1:
        n = n[:len(n) // 2] + n[len(n) // 2 + 1:]
    jumatate = len(n) // 2
    a = int(n[:jumatate])
    b = int(n[jumatate:])
    cmmdc = CMD(a, b)
    print(cmmdc)


if __name__ == '__main__':
    numar = input()
    if validare_date(numar):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        cel_mai_mare_divizor(numar)
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație

Codul calculează cel mai mare divizor comun dintre două numere, reprezentate de jumătățile unui număr introdus de la tastatură. Mai întâi, se validează inputul pentru a se asigura că respectă restricțiile impuse, apoi se calculează jumătățile numărului și se aplică algoritmul lui Euclid pentru a găsi cel mai mare divizor comun. Rezultatul este afișat în final.