2975 - FRadical

From Bitnami MediaWiki
Revision as of 18:21, 2 April 2023 by Cuceu Andrei (talk | contribs) (Pagină nouă: ==Cerința== Definiți funcția '''void FRadical(int n, int &x, int &y)''' cu parametrii: *'''n''', prin care primește un număr natural din intervalul '''[1, 1.000.000.000]''' *'''x''' și '''y''' – două numere naturale care se determină, cu proprietatea că '''x2 * y = n''', iar '''x''' este maxim posibil ==Exemplu== În urma apelului '''FRadical(15000, x, y)''', se obține '''x = 50''', '''y = 6'''. ==Important== Soluţia propusă va conţine definiţia funcţ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Definiți funcția

void FRadical(int n, int &x, int &y)

cu parametrii:

  • n, prin care primește un număr natural din intervalul [1, 1.000.000.000]
  • x și y – două numere naturale care se determină, cu proprietatea că x2 * y = n, iar x este maxim posibil


Exemplu

În urma apelului FRadical(15000, x, y), se obține x = 50, y = 6.

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 FRadical(n: int) -> tuple[int, int]:

   """
   Funcția FRadical primește un număr natural n și returnează două numere naturale x și y,
   cu proprietatea că x^2 * y = n și x este maxim posibil.
   """
   # Inițializăm variabilele x și y cu 1
   x, y = 1, 1
   
   # Căutăm cel mai mare x astfel încât x^2 divide n
   while x * x <= n:
       if n % (x * x) == 0:
           # Dacă x^2 divide n, actualizăm x și y
           x = x * x
           y = n // x
       else:
           # În caz contrar, mărim x cu 1
           x += 1
   
   # Returnăm tuple-ul (x, y)
   return (x, y)


if __name__ == "__main__":

   # Exemplu de utilizare
   n = 15000
   x, y = FRadical(n)
   print(f"Pentru n = {n}, x = {x} și y = {y}")


</syntaxhighlight>