0377 - Difi Min: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == 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 == Programul citește de la tastatură un număr natural ”'''numar'''”. == Date de ieşire == Programul afișează pe ecran numerele '''a b''', separate prin exact un spațiu, cu semnificația din enunț. == Restricții și precizări == * nu...
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 15: Line 15:
: 70
: 70
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 7 10
: 7 10
== Rezolvare ==
== Rezolvare ==
Line 27: Line 27:




def sqrt(numar):  # Această funcție calculează radicalul pătrat dintr-un număr întreg
def radical(numar):  # Această funcție calculează radicalul pătrat dintr-un număr întreg
     x = numar
     x = numar
     y = (x + 1) // 2
     y = (x + 1) // 2
Line 53: Line 53:


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

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.