2975 - FRadical

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa două numere naturale x și y care satisfac proprietatea dată de enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".

Exemplu

Intrare
15000
Ieșire
Datele de intrare corespund restricțiilor impuse
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

if __name__ == "__main__":
    n = int(input("Introduceti numarul n: "))
    if validate_input(n):
        x, y = FRadical(n)
        if validate_output(n, x, y):
            print("Datele de intrare corespund restricțiilor impuse")
            print("Pentru n =", n, ", se obtine x =", x, ", y =", y)
        else:
            print("Datele de intrare nu corespund restricțiilor impuse")

Explicații

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.