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
<syntaxhighlight lang="python" line> 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.")
</syntaxhighlight>
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.