1316 - Prim Aproape Prim - Patrat Prim - Compus

From Bitnami MediaWiki

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.