2547 - Divizori 3
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
<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(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()
</syntaxhighlight>