0029 - MaxPrime: Difference between revisions

From Bitnami MediaWiki
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...
 
Line 23: Line 23:
===Rezolvare ver. 1===
===Rezolvare ver. 1===
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
def validare(n):
    return 5 <= int(n) <= 1000000000


def sub(n, a, b):
def sub(n, a, b):
Line 28: Line 31:
         if x < 2:
         if x < 2:
             return False
             return False
         for i in range(2, int(x**0.5)+1):
         for i in range(2, int(x ** 0.5) + 1):
             if x % i == 0:
             if x % i == 0:
                 return False
                 return False
         return True
         return True


     primes = []
     found_primes = []
     for i in range(n-1, 1, -1):
     for i in range(n - 1, 1, -1):
         if is_prime(i):
         if is_prime(i):
             primes.append(i)
             found_primes.append(i)
             if len(primes) == 2:
             if len(found_primes) == 2:
                 break
                 break
   
    a, b = primes
    return a, b


    a, b = found_primes[0], found_primes[1]
    if a < b:
        a, b = b, a


n = 28
    return a, b
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."




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>
</syntaxhighlight>

Revision as of 10:35, 28 March 2023

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>