0381 - A Prim 2: Difference between revisions
Paul Matei (talk | contribs) 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... |
Paul Matei (talk | contribs) 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.