2547 - Divizori 3
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numerele numar1 și numar2, separate printr-un spațiu.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran numărul de numere din intervalul [numar1,numar2]care au exact 3 divizori.
Restricții și precizări[edit | edit source]
- 1 ≤ numar1< numar2 < 1.000.000.000
Exemplu[edit | edit source]
- Intrare
- 11 50
- Ieșire
- 2
Explicație[edit | edit source]
Numerele din intervalul [11,50] care au exact 3 divizori sunt 25 și 49.
Rezolvare[edit | edit source]
<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>
Explicație rezolvare[edit | edit source]
Acest cod Python are ca scop găsirea numărului de numere care au exact trei divizori, între două numere date.
Funcția validare_date primește două numere sub formă de string și returnează o valoare booleană, True dacă cele două numere sunt valide și False dacă nu sunt. Pentru ca cele două numere să fie considerate valide, trebuie să fie numere întregi pozitive, cu o valoare cuprinsă între 1 și 1 miliard, iar diferența dintre cele două numere trebuie să fie mai mică sau egală cu 1000.
Funcția numar_divizori primește un număr întreg pozitiv și returnează o valoare booleană, True dacă numărul are exact trei divizori și False dacă nu. Pentru a determina numărul de divizori, funcția parcurge toți divizorii numărului și îi numără. Dacă numărul de divizori ajunge la 3, atunci funcția returnează True, în caz contrar, returnează False.
Funcția main este funcția principală care este apelată la pornirea programului. Funcția primește de la utilizator două numere sub formă de string, le validează folosind funcția validare_date, le convertește la intregi și calculează numărul de numere care au exact trei divizori, apelând funcția numar_divizori. Numărul de astfel de numere este apoi afișat. În cazul în care datele introduse nu sunt valide, funcția afișează un mesaj de eroare.
Astfel, acest program primește două numere de la utilizator și afișează numărul de numere care au exact trei divizori între aceste două numere.