0389 - Divizori Pari Interval: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Line 21: Line 21:
def validare_date(numar1, numar2):
def validare_date(numar1, numar2):
     flag = False
     flag = False
     if numar1.isdigit() and numar2.isdigit():
     if numar1.isdigit() and numar2.isdigit():
         if 0 < int(numar1) < int(numar2) <= 1_000_000_000 and int(numar2) - int(numar1) <= 1000:
         if 0 < int(numar1) < int(numar2) <= 1_000_000_000 and int(numar2) - int(numar1) <= 1000:
Line 28: Line 27:
     return flag
     return flag


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


def maxim_divizori_pari(numar1, numar2):
def maxim_divizori_pari(numar1, numar2):
Line 53: Line 54:
     numar1 = input()
     numar1 = input()
     numar2 = input()
     numar2 = input()
     if validare_date(numar1, numar2):
     if validare_date(numar1, numar2):
 
         nr_divizori_pari, min_numar, max_numar = maxim_divizori_pari(int(numar1), int(numar2))
         nrd, min_numar, max_numar = maxim_divizori_pari(int(numar1), int(numar2))
 
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print(f"{nrd} {min_numar} {max_numar}")
         print(f"{nr_divizori_pari} {min_numar} {max_numar}")
     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 09:35, 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 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(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>