0377 - Difi Min: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 58: Line 58:


: "validare_date" verifică dacă un număr dat este un întreg pozitiv mai mic sau egal cu 1.000.000.000.
: "validare_date" verifică dacă un număr dat este un întreg pozitiv mai mic sau egal cu 1.000.000.000.
: "sqrt" calculează radicalul pătrat dintr-un număr întreg utilizând metoda lui Newton.
: "radical" calculează radicalul pătrat dintr-un număr întreg.
: "difi_min" găsește cea mai mică pereche de numere întregi a și b astfel încât a * b = numar.
: "difi_min" găsește cea mai mică pereche de numere întregi a și b astfel încât a * b = numar.
În funcția principală, se citește un număr de la tastatură, se verifică dacă acesta este valid utilizând funcția "validare_date" și, dacă da, se apelează funcția "difi_min" cu numărul dat ca argument. Dacă numărul nu este valid, se afișează un mesaj corespunzător.
În funcția principală, se citește un număr de la tastatură, se verifică dacă acesta este valid utilizând funcția "validare_date" și, dacă da, se apelează funcția "difi_min" cu numărul dat ca argument. Dacă numărul nu este valid, se afișează un mesaj corespunzător.

Latest revision as of 10:24, 25 April 2023

Cerinţa[edit | edit source]

Se citește numărul natural nenul numit numar. Determinați două numere naturale a , b, cu proprietatea că:

  • a * b = n
  • a ⩽ b
  • diferența b-a este minimă

Date de intrare[edit | edit source]

Programul citește de la tastatură un număr natural ”numar”.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numerele a b, separate prin exact un spațiu, cu semnificația din enunț.

Restricții și precizări[edit | edit source]

  • numar ∈ Ν
  • 0 ⩽ numar ⩽ 1.000.000.000

Exemplu[edit | edit source]

Intrare
70
Ieșire
Datele de intrare corespund restricțiilor impuse.
7 10

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare_date(numar):

   flag = False
   if numar.isdigit():
       if 0 <= int(numar) <= 1_000_000_000:
           flag = True
   return flag


def radical(numar): # Această funcție calculează radicalul pătrat dintr-un număr întreg

   x = numar
   y = (x + 1) // 2
   while y < x:
       x = y
       y = (x + numar // x) // 2
   return x


def difi_min(numar): # Această funcție găsește cea mai mică pereche de numere întregi a și b astfel încât a * b = numar.

   a = sqrt(numar)  # Începe prin a calcula radicalul pătrat al numărului și apoi scade 1 din a până când numărul este divizibil cu a.
   while numar % a != 0:
       a -= 1
       b = numar // a  # La fiecare pas, calculează și valoarea corespunzătoare a lui b și le afișează pe ambele.
       print(a, b)


if __name__ == '__main__':

   numar = input()
   if validare_date(numar):
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       difi_min(int(numar))
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>

Explicație[edit | edit source]

Acest cod definește trei funcții:

"validare_date" verifică dacă un număr dat este un întreg pozitiv mai mic sau egal cu 1.000.000.000.
"radical" calculează radicalul pătrat dintr-un număr întreg.
"difi_min" găsește cea mai mică pereche de numere întregi a și b astfel încât a * b = numar.

În funcția principală, se citește un număr de la tastatură, se verifică dacă acesta este valid utilizând funcția "validare_date" și, dacă da, se apelează funcția "difi_min" cu numărul dat ca argument. Dacă numărul nu este valid, se afișează un mesaj corespunzător.