0389 - Divizori Pari Interval: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
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 ∈ Ν
Line 13: Line 13:
: 10 20
: 10 20
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 4 12 20
: 4 12 20
== Explicație ==  
== Explicație ==  
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>
== Explicație ==
Acest program primește ca intrare două numere naturale (numar1 și numar2) și calculează numărul maxim de divizori pari ai unui număr din intervalul [numar1, numar2] și afișează numărul maxim de divizori pari și cele două numere care au acest număr maxim de divizori pari. Programul include funcțiile validare_date, numar_divizori_pari și maxim_divizori_pari.

Latest revision as of 09:57, 25 April 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 de intrare 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>

Explicație

Acest program primește ca intrare două numere naturale (numar1 și numar2) și calculează numărul maxim de divizori pari ai unui număr din intervalul [numar1, numar2] și afișează numărul maxim de divizori pari și cele două numere care au acest număr maxim de divizori pari. Programul include funcțiile validare_date, numar_divizori_pari și maxim_divizori_pari.