0029 - MaxPrime
Cerință
Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametri de ieșire cele mai mari două numere naturale prime mai mici decât n.
Restricții de precizări
- numele funcției va fi sub
- funcția va avea exact trei parametri, în această ordine:
- primul parametru, n, reprezintă un număr natural, 5 ≤ n < 1000000000
- a și b sunt parametrii prin care funcția va întoarce cele două valori căutate
- parametrii a și b respectă relația a>b
Exemplu
Dacă n=28, apelul subprogramului va furniza prin parametrul a valoarea 23, iar prin b valoarea 19.
Important
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1">
def sub(n, a, b):
def is_prime(x): if x < 2: return False for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True
primes = [] for i in range(n-1, 1, -1): if is_prime(i): primes.append(i) if len(primes) == 2: break a, b = primes return a, b
n = 28
a, b = 0, 0
sub(n, a, b)
print(a, b)
assert 5 <= n < 1000000000, "Valoarea parametrului n nu respectă condițiile impuse de problemă." assert a > b, "Valoarea parametrului a nu este mai mare decât valoarea parametrului b." assert is_prime(a) and is_prime(b), "Valorile întoarse nu sunt numere prime."
</syntaxhighlight>