2975 - FRadical: Difference between revisions

From Bitnami MediaWiki
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ţ...
 
 
(5 intermediate revisions by 2 users not shown)
Line 9: Line 9:
*'''x''' și '''y''' – două numere naturale care se determină, cu proprietatea că '''x2 * y = n''', iar '''x''' este maxim posibil
*'''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==
==Exemplu==
 
;Intrare
În urma apelului '''FRadical(15000, x, y)''', se obține '''x = 50''', '''y = 6'''.
:15000
;Ieșire
:Datele de intrare corespund restricțiilor impuse
:x = 50, y = 6


==Important==
==Important==
Line 23: Line 34:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


def FRadical(n: int) -> tuple[int, int]:
import math
     """
 
    Funcția FRadical primește un număr natural n și returnează două numere naturale x și y,
def validate_input(n):
    cu proprietatea că x^2 * y = n și x este maxim posibil.
     if n < 1 or n > 1000000000:
    """
        print("Numarul n trebuie sa fie intre 1 si 1.000.000.000.")
     # Inițializăm variabilele x și y cu 1
        return False
    x, y = 1, 1
     return True
   
 
     # Căutăm cel mai mare x astfel încât x^2 divide n
def FRadical(n):
     while x * x <= n:
     x = int(math.sqrt(n))
         if n % (x * x) == 0:
     while x >= 1:
            # Dacă x^2 divide n, actualizăm x și y
         y = n // (x * x)
            x = x * x
        if x * x * y == n:
            y = n // x
             return x, y
        else:
        x -= 1
             # În caz contrar, mărim x cu 1
            x += 1
   
    # Returnăm tuple-ul (x, y)
    return (x, y)


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__":
if __name__ == "__main__":
     # Exemplu de utilizare
     n = int(input("Introduceti numarul n: "))
     n = 15000
     if validate_input(n):
    x, y = FRadical(n)
        x, y = FRadical(n)
    print(f"Pentru n = {n}, x = {x} și y = {y}")
        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")
 




</syntaxhighlight>
</syntaxhighlight>
==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.

Latest revision as of 17:28, 6 May 2023

Cerința[edit]

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[edit]

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

Date de ieșire[edit]

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[edit]

Intrare
15000
Ieșire
Datele de intrare corespund restricțiilor impuse
x = 50, y = 6

Important[edit]

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[edit]

Rezolvare ver. 1[edit]

<syntaxhighlight lang="python" line="1" start="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")


</syntaxhighlight>

Explicații[edit]

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.