2697 - Divizori Impari

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.")