0377 - Difi Min
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 introduse 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 sqrt(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>