3271 - Pereche CMMDC
Cerinţa
Se dă un șir de n perechi de numere naturale nenule. Să se determine perechea pentru care cel mai mare divizor comun este maxim. Dacă există mai multe asemenea perechi, se va determina aceea pentru care suma valorilor este maximă. Dacă există mai multe asemenea perechi, se va determina prima din șir.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale.
Date de ieşire
Programul va afișa pe ecran două numere, separate printr-un spațiu, reprezentând perechea determinată.
Restricții și precizări
- n ∈ Ν
- 0 ⩽ n ⩽ 1.000
- valorile din cele n numere citite vor fi mai mici decât 2^31
Exemplu1
- Intrare
- 4
- 12 18
- 16 12
- 18 30
- 25 35
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 18 30
Exemplu2
- Intrare
- 3
- 29 31
- 16 12
- 15 45
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 15 45
Rezolvare
<syntaxhighlight lang="python" line> def verificare_numar(numar):
if numar.isdigit() and 0 <= int(numar) <= 2**31-1: return True return False
def verificare_n(n):
if 0 <= n <= 1000: return True return False
def CMD(numar1, numar2):
while numar2: rest = numar1 % numar2 numar1, numar2 = numar2, rest cmmdc = numar1 return cmmdc
if __name__ == '__main__':
n = int(input()) cmmdc_maxim = 0 suma_maxima_perechiilor = 0 perechea_cu_suma_maxima = None if verificare_n(n): date = True
for i in range(n): pereche = input().split() numar1, numar2 = pereche[0], pereche[1] if verificare_numar(numar1) and verificare_numar(numar2): numar1, numar2 = int(numar1), int(numar2) cmmdc = CMD(numar1, numar2) suma_perechii = numar1 + numar2 if cmmdc > cmmdc_maxim: cmmdc_maxim = cmmdc suma_maxima_perechiilor = suma_perechii perechea_cu_suma_maxima = (numar1, numar2) elif cmmdc == cmmdc_maxim and suma_perechii > suma_maxima_perechiilor: suma_maxima_perechiilor = suma_perechii perechea_cu_suma_maxima = (numar1, numar2) else: date = False
if date: print("\nDatele de intrare corespund restricțiilor impuse.\n") print(perechea_cu_suma_maxima[0], perechea_cu_suma_maxima[1]) else: print("Datele de intrare nu corespund restricțiilor impuse.") else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>