0389 - Divizori Pari Interval: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == 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...
 
No edit summary
 
(4 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 ∈ Ν
* 0 &less; numar1 ⩽ numar2 ⩽ 1.000.000.000
* 0 ⩽ numar1 ⩽ numar2 ⩽ 1.000.000.000
* numar2 - numar1 ⩽ 1.000
* numar2 - numar1 ⩽ 1.000
== Exemplu ==
== Exemplu ==
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[edit]

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[edit]

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

Date de ieşire[edit]

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[edit]

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

Exemplu[edit]

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

Explicație[edit]

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[edit]

<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[edit]

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.