0381 - A Prim 2: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == 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 == Programul citește de la tastatură numărul '''n''', și apoi '''n''' numere naturale. == Date de ieşire == 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...
 
No edit summary
 
Line 66: Line 66:


</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
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.

Latest revision as of 06:06, 9 April 2023

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.