1316 - Prim Aproape Prim - Patrat Prim - Compus
Cerinţa[edit | edit source]
- Un număr natural nenul este prim, dacă are exact doi divizori (ex. 7).
- Un număr natural nenul se va numi pătrat prim, dacă este pătratul unui număr prim (ex. 49 = 7 * 7).
- Un număr natural nenul se va numi aproape prim, dacă este produsul a două numere prime distincte (ex. 10 = 2 * 5).
- Un număr natural nenul ce nu se încadrează în niciuna din cazurile de mai sus, se numeşte compus (ex. 8=2*2*2, 100=2*2*5*5).
Se citeşte un număr natural n. Să se identifice din ce categorie de mai sus face parte.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran unul dintre mesajele: prim, aproape prim, patrat prim sau compus.
Restricții și precizări[edit | edit source]
- 1 < n ≤ 2.000.000.000
Exemplu[edit | edit source]
- Intrare
- 20
- Ieșire
- compus
Explicație[edit | edit source]
Numărul 20=2*2*5, deci este număr compus.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import math
def prim(n):
cnt = 0 for i in range(1, int(math.sqrt(n))+1): if n % i == 0: cnt += 2 if i * i == n: cnt -= 1 if cnt == 2: return 1 elif cnt == 4: return 2 else: return 0
def validare_date(prompt):
while True: try: value = int(input(prompt)) if value <= 0: print("Introduceti un numar intreg pozitiv.") else: return value except ValueError: print("Introduceti un numar intreg pozitiv.")
if __name__ == '__main__':
n = validare_date("Introduceti un numar intreg pozitiv: ") i = int(math.sqrt(n)) if prim(n) == 1: print("prim") elif prim(n) == 2: print("aproape prim") elif i * i == n and prim(i) == 1: print("patrat prim") else: print("compus") print("Datele de intrare corespund restrictiilor impuse.")
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
Acest program determină dacă un număr dat este prim, aproape prim sau compus.
Pentru a verifica dacă numărul este prim, se apelează funcția prim(n), care primește ca argument numărul dat n. În interiorul funcției, se calculează numărul de divizori ai lui n prin parcurgerea tuturor numerelor întregi până la radicalul pătrat al lui n. Dacă numărul de divizori ai lui n este 2, atunci n este un număr prim.
Dacă numărul de divizori ai lui n este 4, atunci n este considerat aproape prim.
Dacă n este un pătrat perfect și radicalul pătrat al lui n este prim, atunci n este considerat patrat prim.
Dacă niciuna dintre condițiile de mai sus nu este îndeplinită, atunci n este considerat un număr compus.
Funcția validare_date(prompt) este folosită pentru a valida input-ul primit de la utilizator. Această funcție cere introducerea unui număr întreg pozitiv și afișează un mesaj de eroare dacă input-ul nu este un număr întreg pozitiv.
În cadrul programului principal, se citește input-ul utilizatorului folosind funcția validare_date(prompt) și se determină tipul de număr folosind funcția prim(n). Programul afișează apoi tipul numărului și un mesaj care confirmă faptul că input-ul corespunde restricțiilor impuse.