1316 - Prim Aproape Prim - Patrat Prim - Compus: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == *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=...)
 
Fără descriere a modificării
Linia 22: Linia 22:
import math
import math


def is_prime(n):
def prim(n):
     if n <= 1:
     cnt = 0
         return False
    for i in range(1, int(math.sqrt(n))+1):
    elif n == 2 or n == 3:
         if n % i == 0:
         return True
            cnt += 2
     elif n % 2 == 0 or n % 3 == 0:
        if i * i == n:
         return False
            cnt -= 1
    if cnt == 2:
         return 1
     elif cnt == 4:
         return 2
     else:
     else:
         i = 5
         return 0
        while i <= math.sqrt(n):
            if n % i == 0 or n % (i + 2) == 0:
                return False
            i += 6
        return True


def validare_date(numar1, numar2):
def validate_input(prompt):
     flag = False
     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.")


n = int(input())
if __name__ == '__main__':
 
     n = validate_input("Introduceti un numar intreg pozitiv: ")
if n <= 1:
     i = int(math.sqrt(n))
     print("Nu este niciunul dintre tipurile cerute.")
    if prim(n) == 1:
elif n == 2 or n == 3:
    print("prim")
elif n % 2 == 0 or n % 3 == 0:
    print("compus")
else:
    is_prime = True
     i = 5
    while i <= math.sqrt(n):
        if n % i == 0 or n % (i + 2) == 0:
            is_prime = False
            break
        i += 6
    if is_prime:
         print("prim")
         print("prim")
    elif prim(n) == 2:
        print("aproape prim")
    elif i * i == n and prim(i) == 1:
        print("patrat prim")
     else:
     else:
         sqrt_n = math.isqrt(n)
         print("compus")
        if sqrt_n ** 2 == n:
    print("Datele de intrare corespund restrictiilor impuse.")
            is_prime = True
 
            i = 2
            while i <= math.isqrt(sqrt_n):
                if sqrt_n % i == 0:
                    is_prime = False
                    break
                i += 1
            if is_prime:
                print("patrat prim")
            else:
                print("compus")
        else:
            found = False
            for i in range(2, math.isqrt(n) + 1):
                if n % i == 0 and is_prime(i) and is_prime(n // i):
                    found = True
                    break
            if found:
                print("aproape prim")
            else:
                print("compus")






</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
Acest program verifică dacă un număr întreg pozitiv introdus de utilizator este prim, aproape prim, pătrat prim sau compus. Funcția prim(n) primește numărul n și verifică dacă acesta este prim, aproape prim, pătrat prim sau compus. Funcția validate_input(prompt) verifică dacă inputul utilizatorului este un număr întreg pozitiv valid. Apoi, programul folosește funcțiile respective pentru a verifica inputul utilizatorului și afișează rezultatul corespunzător.

Versiunea de la data 2 aprilie 2023 18:18

Cerinţa

  • 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

Programul citește de la tastatură numărul n.

Date de ieşire

Programul va afișa pe ecran unul dintre mesajele: prim, aproape prim, patrat prim sau compus.

Restricții și precizări

  • 1 < n ≤ 2.000.000.000

Exemplu

Intrare
20
Ieșire
compus

Explicație

Numărul 20=2*2*5, deci este număr compus.

Rezolvare

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 validate_input(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 = validate_input("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.")

Explicație rezolvare

Acest program verifică dacă un număr întreg pozitiv introdus de utilizator este prim, aproape prim, pătrat prim sau compus. Funcția prim(n) primește numărul n și verifică dacă acesta este prim, aproape prim, pătrat prim sau compus. Funcția validate_input(prompt) verifică dacă inputul utilizatorului este un număr întreg pozitiv valid. Apoi, programul folosește funcțiile respective pentru a verifica inputul utilizatorului și afișează rezultatul corespunzător.