0377 - Difi Min: Difference between revisions
Robert Manc (talk | contribs) 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... |
Robert Manc (talk | contribs) No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 15: | Line 15: | ||
: 70 | : 70 | ||
; Ieșire | ; Ieșire | ||
: Datele | : Datele de intrare corespund restricțiilor impuse. | ||
: 7 10 | : 7 10 | ||
== Rezolvare == | == Rezolvare == | ||
| Line 27: | Line 27: | ||
def | 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
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
- numar ∈ Ν
- 0 ⩽ numar ⩽ 1.000.000.000
Exemplu
- Intrare
- 70
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 7 10
Rezolvare
<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
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.