4190 - FPatrate

From Bitnami MediaWiki
Revision as of 18:13, 2 April 2023 by Cuceu Andrei (talk | contribs) (Pagină nouă: ==Cerința== Subprogramul '''patrate''' are trei parametri: *'''n''', prin care primește un număr natural ('''n∈[2,109])'''; *'''x''' și '''y''', prin care furnizează câte un număr natural cu proprietatea că '''x2⋅y2=n'''și '''2≤x<y'''sau valoarea '''0''', prin fiecare dintre aceștia, dacă nu există două astfel de numere. Dacă sunt mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui '''x'''. Scrieți definiția compl...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Subprogramul patrate are trei parametri:

  • n, prin care primește un număr natural (n∈[2,109]);
  • x și y, prin care furnizează câte un număr natural cu proprietatea că x2⋅y2=nși 2≤x<ysau valoarea 0, prin fiecare dintre aceștia, dacă nu există două astfel de numere. Dacă sunt mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui x.

Scrieți definiția completă a subprogramului.

Exemplu

Pentru n=400, după apel, x=2 şi y=10, iar pentru n=16 sau n=24, după apel, x=0 și y=0.


Important

Soluția propusă va conține 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 patrate(n):

   x = 0
   y = 0
   min_x = float('inf')  # valoare inițială infinită pentru a găsi cel mai mic x
   for i in range(2, int(n ** 0.5) + 1):  # caută toate valorile posibile pentru x
       if n % (i ** 2) == 0:  # dacă x este factor al lui n, încercă să găsești y
           j = n // (i ** 2)
           if i < j and j <= int(n ** 0.5) and n == i ** 2 * j ** 2:  # verifică condițiile y-ului
               if i < min_x:  # dacă acest x este mai mic decât cele găsite anterior, actualizează x și y
                   min_x = i
                   x = i
                   y = j
   if x == 0 and y == 0:  # dacă nu se găsesc perechi x, y care să satisfacă condițiile, returnează 0, 0
       return 0, 0
   else:
       return x, y


def main():

   n = 400
   x, y = patrate(n)
   print(f"Pentru n = {n}, x = {x} și y = {y}")
   
   n = 16
   x, y = patrate(n)
   print(f"Pentru n = {n}, x = {x} și y = {y}")
   
   n = 24
   x, y = patrate(n)
   print(f"Pentru n = {n}, x = {x} și y = {y}")


if __name__ == '__main__':

   main()


</syntaxhighlight>