0381 - A Prim 2

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se citește un număr natural n și apoi n numere naturale. Să se determine cel mai mare număr aproape prim dintre cele date, și de câte ori apare.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, și apoi n numere naturale.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numere M și C, separate prin exact un spațiu, reprezentând cel mai mare număr aproape prim dintre cele date și numărul său de apariții.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • cele n numere citite sunt cuprinse între 1 și 1.000.000.000

Exemplu[edit | edit source]

Intrare
6

35 55 12 6 25 50

Ieșire
55 1


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare_date(numar1, numar2):

   flag = False

def is_prime(n):

   if n < 2:
       return False
   for i in range(2, int(n**0.5) + 1):
       if n % i == 0:
           return False
   return True

def is_almost_prime(n):

   prime_factors = []
   for i in range(2, int(n**0.5) + 1):
       if n % i == 0:
           if is_prime(i):
               prime_factors.append(i)
           if is_prime(n//i):
               prime_factors.append(n//i)
   if len(prime_factors) == 2 or (len(prime_factors) == 1 and prime_factors[0]**2 == n):
       return True
   if len(prime_factors) == 0:
       return False
   if len(prime_factors) > 2:
       return False
   if abs(prime_factors[0]*prime_factors[1] - n) <= 1:
       return True
   return False

n = int(input("Introduceti numarul de numere: "))

validare_date(n, 1_000_000_000) # Validare date

max_almost_prime = -1 count = 0

for i in range(n):

   num = int(input("Introduceti numarul: "))
   if is_almost_prime(num) and num > max_almost_prime:
       max_almost_prime = num
       count = 1
   elif num == max_almost_prime:
       count += 1

print("Cel mai mare numar aproape prim este", max_almost_prime, "si apare de", count, "ori.")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acesta este un program Python care determină cel mai mare număr aproape prim introdus de utilizator și numărul de apariții ale acestuia. Funcția is_almost_prime(n) determină dacă un număr este aproape prim, adică are exact doi factori primi sau un singur factor prim dublu și niciun alt factor prim. Programul utilizează o funcție is_prime(n) care verifică dacă un număr este prim.