0381 - A Prim 2
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ău de apariții.
Restricții și precizări
- 1 ≤ n ≤ 100
- cele n numere citite sunt cuprinse între 1 și 1.000.000.000
Exemplu
- Intrare
- 6
35 55 12 6 25 50
- Ieșire
- 55 1
Rezolvare
<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>