0029 - MaxPrime

From Bitnami MediaWiki
Revision as of 14:16, 25 March 2023 by Cuceu Andrei (talk | contribs) (Pagină nouă: ==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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>