2547 - Divizori 3

De la Universitas MediaWiki
Versiunea din 18 martie 2023 17:33, autor: Paul Matei (discuție | contribuții) (Pagină nouă: == Cerinţa == Se citesc două numere naturale '''numar1''' și '''numar2''' ('''numar1 < numar2''') având cel mult '''9''' cifre fiecare. Afișați câte numere din intervalul '''[numar1, numar2]''' au exact '''3''' divizori. == Date de intrare == Programul citește de la tastatură numerele '''numar1''' și '''numar2''', separate printr-un spațiu. == Date de ieşire == Programul va afișa pe ecran numărul de numere din intervalul '''[numar1,numar2]'''care au exact '''3''...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

Se citesc două numere naturale numar1 și numar2 (numar1 < numar2) având cel mult 9 cifre fiecare. Afișați câte numere din intervalul [numar1, numar2] au exact 3 divizori.

Date de intrare

Programul citește de la tastatură numerele numar1 și numar2, separate printr-un spațiu.

Date de ieşire

Programul va afișa pe ecran numărul de numere din intervalul [numar1,numar2]care au exact 3 divizori.

Restricții și precizări

  • 1 ≤ numar1< numar2 < 1.000.000.000

Exemplu

Intrare
11 50
Ieșire
2

Explicație

Numerele din intervalul [11,50] care au exact 3 divizori sunt 25 și 49.

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(n):
    divizori = 0
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            divizori += 2
            if n // i == i:
                divizori -= 1
        if divizori > 3:
            break
    return divizori == 3

def main():
    numar1, numar2 = input().split()

    if validare_date(numar1, numar2):
        numar1 = int(numar1)
        numar2 = int(numar2)

        numar = 0
        for i in range(numar1, numar2 + 1):
            if numar_divizori(i):
                numar += 1

        print(numar)

    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

if __name__ == "__main__":
    main()