0389 - Divizori Pari Interval

From Bitnami MediaWiki
Revision as of 18:36, 14 March 2023 by Robert Manc (talk | contribs)

Cerinţa

Se dau două numere naturale numar1 și numar2. Să se determine cel mai mic și cel mai mare număr din intervalul [numar1,numar2] cu număr maxim de divizori pari şi numărul maxim de divizori pari.

Date de intrare

Programul citește de la tastatură numerele numar1 și numar2.

Date de ieşire

Programul afișează pe ecran numerele nrd min_numar max_numar, separate prin exact un spațiu , reprezentând numărul maxim de divizori pari ai numerelor din [numar1,numar2], cel mai mic şi respectiv cel mai mare număr din interval cu număr maxim de divizori pari.

Restricții și precizări

  • numar ∈ Ν
  • 0 ⩽ numar1 ⩽ numar2 ⩽ 1.000.000.000
  • numar2 - numar1 ⩽ 1.000

Exemplu

Intrare
10 20
Ieșire
Datele introduse corespund restricțiilor impuse.
4 12 20

Explicație

Numărul maxim de divizori pari pentru numerele din intervalul [10,20] este 4. Numerele din interval cu 4 divizori pari sunt 12, 16 şi 20.

Rezolvare

<syntaxhighlight lang="python" line> def validare_date(numar1, numar2):

   flag = False
   if numar1.isdigit() and numar2.isdigit():
       if 0 < int(numar1) < int(numar2) <= 1_000_000_000 and int(numar2) - int(numar1) <= 1000:
           flag = True
   return flag

def numar_divizori_pari(numar):

   count = 0
   for divizor in range(1, numar+1):
       if numar % divizor == 0 and divizor % 2 == 0:
           count += 1
   return count

def maxim_divizori_pari(numar1, numar2):

   max_divizori = 0
   min_numar = 0
   max_numar = 0
   for numar in range(int(numar1), int(numar2)+1):
       divizori_pari = numar_divizori_pari(numar)
       if divizori_pari > max_divizori:
           max_divizori = divizori_pari
           min_numar = numar
           max_numar = numar
       elif divizori_pari == max_divizori:
           max_numar = numar
   return max_divizori, min_numar, max_numar


if __name__ == "__main__":

   numar1 = input()
   numar2 = input()
   if validare_date(numar1, numar2):
       nrd, min_numar, max_numar = maxim_divizori_pari(int(numar1), int(numar2))
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       print(f"{nrd} {min_numar} {max_numar}")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>