2975 - FRadical

De la Universitas MediaWiki
Versiunea din 2 aprilie 2023 18:21, autor: Cuceu Andrei (discuție | contribuții) (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ţ...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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

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}")