1023 - Cmmdc 3
De la Universitas MediaWiki
Cerinţa
Se dă un sir cu n
elemente, numere naturale nenule. Folosind metoda Divide et Impera, determinaţi cel mai mare divizor comun al elementelor acestui șir.
Date de intrare
Programul citește de la tastatură numărul n
, iar cele n
elemente ale șirului.
Date de ieşire
Programul afișează pe ecran numărul X
, reprezentând cel mai mare divizor comun al elementelor.
Restricţii şi precizări
1 ≤ n ≤ 1000
- elementele șirului vor avea cel mult
9
cifre - se recomandă folosirea metodei Divide et Impera
Exemplul 1
Date de intrare
7 18 54 24 42 108 60 30
Date de ieșire
6
Exemplul 2
Date de intrare
1001 123
Numerele introduse nu respectă restricțiile.
def verifica_restrictii(n, arr):
if 1 <= n <= 1000 and all(1 <= num <= 10**9 for num in arr):
return True
return False
def cmmd(x, y):
while y:
x, y = y, x % y
return x
def cmmd_divide_et_impera(arr, start, end):
if start == end:
return arr[start]
else:
mid = (start + end) // 2
left_cmmd = cmmd_divide_et_impera(arr, start, mid)
right_cmmd = cmmd_divide_et_impera(arr, mid + 1, end)
return cmmd(left_cmmd, right_cmmd)
def main():
n = int(input("Introduceți numărul n: "))
arr = list(map(int, input("Introduceți cele n elemente separate prin spațiu: ").split()))
if verifica_restrictii(n, arr):
rezultat = cmmd_divide_et_impera(arr, 0, n - 1)
print("Cel mai mare divizor comun:", rezultat)
else:
print("Numerele introduse nu respectă restricțiile.")
if __name__ == "__main__":
main()