2547 - Divizori 3
De la Universitas MediaWiki
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()