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]

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]

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

Date de ieşire[edit]

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]

  • numar ∈ Ν
  • 0 ⩽ numar ⩽ 1.000.000.000

Exemplu[edit]

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

Rezolvare[edit]

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

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.