0377 - Difi Min

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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

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.")

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.