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 validare(n):
return 5 <= int(n) <= 1000000000
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
found_primes = []
for i in range(n - 1, 1, -1):
if is_prime(i):
found_primes.append(i)
if len(found_primes) == 2:
break
a, b = found_primes[0], found_primes[1]
if a < b:
a, b = b, a
return a, b
if __name__ == '__main__':
a, b = 0, -1
# n = input("n=")
n = 28
if validare(n):
sub(n, a, b)
if a > b:
print("Datele de intrare sunt corecte.")
else:
print("Datele introduse nu sunt corecte.")
else:
print("Datele introduse nu sunt corecte.")
</syntaxhighlight>