2697 - Divizori Impari

De la Universitas MediaWiki

Cerinţa

Se dă un șir de n numere naturale nenule. Determinați pentru fiecare număr din șir care este cel mai mare divizor impar al său.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieşire

Programul va afișa pe ecran n numere naturale separate prin spații reprezentând cei mai mari divizori impari ai numerelor din șir.

Restricții și precizări

  • 1 ≤ n ≤ 10.000
  • cele n numere citite vor avea cel mult 16 cifre și vor fi strict pozitive

Exemplu

Intrare
5
88 25 14 1 6
Ieșire
11 25 7 1 3

Rezolvare

def validare_date(n, nums):
    # Verificați dacă n se află în intervalul [1, 10000]
    if n < 1 or n > 10000:
        return False

    # Verificați dacă fiecare număr din șir este strict pozitiv și are cel mult 16 cifre
    for num in nums:
        if num <= 0 or num > 10**16:
            return False

    # Datele de intrare sunt valide
    return True

if __name__ == '__main__':
    # Citirea datelor de intrare
    n = int(input())
    nums = list(map(int, input().split()))

    # Validarea datelor de intrare
    if validare_date(n, nums):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")

        # Calcularea și afișarea celor mai mari divizori impari ai numerelor din șir
        for num in nums:
            largest_odd_divisor = 1
            for i in range(1, num+1, 2):
                if num % i == 0:
                    largest_odd_divisor = i
            print(largest_odd_divisor, end=' ')
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")