3938 - Generatoare

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.

Enunț

Două numere a și b sunt numite generatoare ale unui număr natural n dacă a*b+[a/b] = n unde s-a notat cu [a/b] partea întreagă a numărului real (a/b).

Subprogramul generatoare are un singur parametru n, prin care primește un număr natural (n∈[2,10^9]). Subprogramul afișează pe ecran toate perechile distincte de numere naturale cu proprietatea că sunt generatoare ale lui n și că primul număr din pereche este par. Numerele din fiecare pereche sunt separate prin simbolul minus (-), iar perechile sunt separate prin câte un spațiu. Dacă nu există astfel de perechi, se afișează pe ecran mesajul nu exista.

Cerința

Scrieți definiția completă a subprogramului generatoare.

Exemplul 1

Intrare n=2020

Ieșire:

2-1010 4-505 10-202 20-101 96-21 200-10 606-3 808-2

Exemplul 2

Intrare n=32

Ieșire:

2-16 4-8

Exemplul 3

Intrare n=112

Ieșire:

2-56 4-28 8-14

Exemplul 4

Intrare n=1

Ieșire:

Numarul nu respecta conditiile

Rezolvare

def generatoare(n):
    #Testare conditie
    for a in range(2, n // 2 + 1):
        b = n // a
        if a * b + int(a / b) == n and a % 2 == 0:
            print(f"{a}-{b}", end=" ") #Printare rezultate
# Exemplu de utilizare

def verificare(n):
    if n<2 or n>1000000000:
        return 1
    else:
        return 0
n = int(input("Introduceti numarul natural n: "))
if(verificare(n) == 0):
    generatoare(n)
else:
    print("Numarul nu respecta conditiile")