0410 - CMMDC 2
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.