0389 - Divizori Pari Interval

De la Universitas MediaWiki

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

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.")

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.