0389 - Divizori Pari Interval: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Line 4: Line 4:
Programul citește de la tastatură numerele '''numar1''' și '''numar2'''.
Programul citește de la tastatură numerele '''numar1''' și '''numar2'''.
== Date de ieşire ==
== 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.
Programul afișează pe ecran numerele '''nr_divizori_pari''' '''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 ==
== Restricții și precizări ==
* numar ∈ Ν
* numar ∈ Ν

Revision as of 09:36, 21 March 2023

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 nr_divizori_pari 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(divizori_pari):

   count = 0
   for divizor in range(1, divizori_pari+1):
       if divizori_pari % 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):
       nr_divizori_pari, min_numar, max_numar = maxim_divizori_pari(int(numar1), int(numar2))
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       print(f"{nr_divizori_pari} {min_numar} {max_numar}")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>