2697 - Divizori Impari: Difference between revisions

From Bitnami MediaWiki
Line 19: Line 19:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def validare_date(n, nums):
def validare_date(n, nums):
     # Verificați dacă n se află în intervalul [1, 10^4]
     # Verificați dacă n se află în intervalul [1, 10000]
     if n < 1 or n > 10000:
     if n < 1 or n > 10000:
         return False
         return False
Line 41: Line 41:
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print("\nDatele de intrare corespund restricțiilor impuse.\n")


         # Calcularea și afișarea cei mai mari divizori impari ai numerelor din șir
         # Calcularea și afișarea celor mai mari divizori impari ai numerelor din șir
         for num in nums:
         for num in nums:
             largest_odd_divisor = 1
             largest_odd_divisor = 1
Line 50: Line 50:
     else:
     else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Revision as of 08:26, 6 April 2023

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

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

</syntaxhighlight>