0029 - MaxPrime: Diferență între versiuni

De la Universitas 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...)
 
 
(Nu s-au afișat 7 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 2: Linia 2:


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'''.
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'''.
==Date de intrare== 
Se citește '''n''' un număr natural, '''5 ≤ n < 1000000000'''
==Date de ieșire==
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa:
*cel mai mare număr natural prim mai mic decât '''n'''
*al doilea cel mai mare număr natural prim mai mic decât '''n'''
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".


==Restricții de precizări==
==Restricții de precizări==
Linia 13: Linia 23:
==Exemplu==
==Exemplu==


Dacă '''n=28''', apelul subprogramului va furniza prin parametrul a valoarea '''23''', iar prin '''b''' valoarea '''19'''.
;Intrare
:28
;Ieșire
:Datele de intrare sunt corecte.
:23 19


==Important==
==Important==
Linia 23: Linia 37:
===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):
    lista = []
     def is_prime(x):
     def is_prime(x):
         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
     a, b = found_primes[0], found_primes[1]
     return a, b
     if a < b:
        a, b = b, a
     lista.append(a)
    lista.append(b)
    return lista




n = 28
if __name__ == '__main__':
a, b = 0, 0
    a, b = 0, -1
sub(n, a, b)
    # n = input("n=")
print(a, b)
    n = input()
    if validare(n):
        n = int(n)
        if a > b:
            print("Datele de intrare sunt corecte.")
            for i in sub(n, a, b):
                print(i, end=" ")
        else:
            print("Datele introduse nu sunt corecte.")
    else:
        print("Datele introduse nu sunt corecte.")


assert 5 <= n < 1000000000, "Valoarea parametrului n nu respectă condițiile impuse de problemă."
</syntaxhighlight>
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."


==Explicații==


</syntaxhighlight>
În acest cod Python, se definește funcția validare(n) care primește un număr n și returnează True dacă n este între 5 și 1000000000, inclusiv, și False altfel. Aceasta este o verificare preliminară a valorii de intrare pentru a se asigura că se încadrează în intervalul de valori permis.
 
Funcția sub(n, a, b) primește un număr natural n și două variabile a și b prin referință, unde cele două variabile sunt inițializate cu valorile 0 și -1, respectiv. Funcția determină cele mai mari două numere prime mai mici decât n și le atribuie variabilelor a și b. Pentru a determina dacă un număr este prim, funcția utilizează o funcție internă is_prime(x) care primește un număr x și returnează True dacă este prim și False altfel.
 
În cadrul funcției principale __main__(), se citește valoarea n dintr-un input sau se atribuie o valoare presetată (în cazul de față, 28), iar apoi se verifică dacă valoarea introdusă este validă utilizând funcția validare(n). Dacă este validă, se apelează funcția sub(n, a, b) care determină cele două numere prime și le atribuie variabilelor a și b prin referință. Se verifică dacă a este mai mare decât b și se afișează un mesaj corespunzător. Dacă valoarea introdusă nu este validă, se afișează un mesaj corespunzător.

Versiunea curentă din 6 mai 2023 16:24

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.


Date de intrare

Se citește n un număr natural, 5 ≤ n < 1000000000

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa:

  • cel mai mare număr natural prim mai mic decât n
  • al doilea cel mai mare număr natural prim mai mic decât n

În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".

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

Intrare
28
Ieșire
Datele de intrare sunt corecte.
23 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

def validare(n):
    return 5 <= int(n) <= 1000000000


def sub(n, a, b):
    lista = []

    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
    lista.append(a)
    lista.append(b)
    return lista


if __name__ == '__main__':
    a, b = 0, -1
    # n = input("n=")
    n = input()
    if validare(n):
        n = int(n)
        if a > b:
            print("Datele de intrare sunt corecte.")
            for i in sub(n, a, b):
                print(i, end=" ")
        else:
            print("Datele introduse nu sunt corecte.")
    else:
        print("Datele introduse nu sunt corecte.")

Explicații

În acest cod Python, se definește funcția validare(n) care primește un număr n și returnează True dacă n este între 5 și 1000000000, inclusiv, și False altfel. Aceasta este o verificare preliminară a valorii de intrare pentru a se asigura că se încadrează în intervalul de valori permis.

Funcția sub(n, a, b) primește un număr natural n și două variabile a și b prin referință, unde cele două variabile sunt inițializate cu valorile 0 și -1, respectiv. Funcția determină cele mai mari două numere prime mai mici decât n și le atribuie variabilelor a și b. Pentru a determina dacă un număr este prim, funcția utilizează o funcție internă is_prime(x) care primește un număr x și returnează True dacă este prim și False altfel.

În cadrul funcției principale __main__(), se citește valoarea n dintr-un input sau se atribuie o valoare presetată (în cazul de față, 28), iar apoi se verifică dacă valoarea introdusă este validă utilizând funcția validare(n). Dacă este validă, se apelează funcția sub(n, a, b) care determină cele două numere prime și le atribuie variabilelor a și b prin referință. Se verifică dacă a este mai mare decât b și se afișează un mesaj corespunzător. Dacă valoarea introdusă nu este validă, se afișează un mesaj corespunzător.