2975 - FRadical: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Linia 11: Linia 11:


==Date de intrare==  
==Date de intrare==  
*Un număr natural '''n''' din intervalul '''[1, 1.000.000.000]'''.
Se citește de la tastatură un număr natural '''n''' din intervalul '''[1, 1.000.000.000]'''.
 
==Date de ieșire==
==Date de ieșire==
*Două numere naturale '''x''' și''' y '''care satisfac proprietatea dată de enunțul problemei, respectiv''' x^2 * y = n''', iar '''x''' este maxim posibil.
*Două numere naturale '''x''' și''' y '''care satisfac proprietatea dată de enunțul problemei, respectiv''' x^2 * y = n''', iar '''x''' este maxim posibil.

Versiunea de la data 6 mai 2023 17:25

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


Date de intrare

Se citește de la tastatură un număr natural n din intervalul [1, 1.000.000.000].

Date de ieșire

  • Două numere naturale x și y care satisfac proprietatea dată de enunțul problemei, respectiv x^2 * 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

import math

def validate_input(n):
    if n < 1 or n > 1000000000:
        print("Numarul n trebuie sa fie intre 1 si 1.000.000.000.")
        return False
    return True

def FRadical(n):
    x = int(math.sqrt(n))
    while x >= 1:
        y = n // (x * x)
        if x * x * y == n:
            return x, y
        x -= 1

def validate_output(n, x, y):
    if x * x * y != n:
        return False
    if x * x * (y + 1) <= n:
        return False
    return True

def main():
    n = int(input("Introduceti numarul n: "))
    if validate_input(n):
        x, y = FRadical(n)
        if validate_output(n, x, y):
            print("Pentru n =", n, ", se obtine x =", x, ", y =", y)
        else:
            print("Valorile returnate de functia FRadical nu sunt corecte.")

if __name__ == "__main__":
    main()

Explicatii

Funcția validate_input primește un număr natural n și verifică dacă acesta se află în intervalul [1, 1.000.000.000]. Dacă nu se respectă această condiție, funcția afișează un mesaj de eroare și returnează False, altfel returnează True.

Funcția FRadical primește un număr natural n și calculează două numere naturale x și y care satisfac proprietatea dată de enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. Pentru a calcula valorile x și y, funcția parcurge valorile posibile ale lui x, începând cu valoarea radicalului lui n și coborând către 1. Pentru fiecare valoare a lui x, se calculează valoarea lui y și se verifică dacă condiția x^2 * y = n este îndeplinită. Dacă este îndeplinită, atunci funcția returnează valorile x și y.

Funcția validate_output primește trei parametri: numărul natural n, și două numere naturale x și y, și verifică dacă valorile x și y satisfac condiția specificată în enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. Dacă valorile sunt corecte, funcția returnează True, altfel returnează False.

În funcția main, se citește numărul natural n de la tastatură, se validează valorile de intrare cu ajutorul funcției validate_input, se calculează valorile x și y cu ajutorul funcției FRadical, se validează valorile de ieșire cu ajutorul funcției validate_output, și se afișează rezultatul final. Dacă valorile de intrare sau de ieșire nu sunt corecte, se afișează un mesaj de eroare corespunzător.