1128 - Jucarii

De la Universitas MediaWiki

Cerinţa

La o grădiniță, cei m copii de la grupa mică s-au trezit în fața a n jucării diferite. Cel mai isteț dintre ei vă întreabă în câte moduri ar putea să-și aleagă fiecare câte o jucărie ?

Date de intrare

Programul citește de la tastatură numerele naturale m și n.

Date de ieşire

Programul va afișa pe ecran numărul q, reprezentând numărul de moduri în care pot să-și aleagă fiecare câte o jucărie. Pentru că acest număr poate fi foarte mare, se va afișa modulo 224737.

Restricții și precizări

  • 1 ⩽ n, m ⩽ 100.000
  • grădinița este virtuală

Exemplul 1

Intrare
2
4
Ieșire
Datele introduse corespund restricțiilor impuse.
12


Exemplul 2

Intrare
2
q
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Explicație

Avem 2 copii și 4 jucării ( notate a, b, c, d ). Cei doi copii pot lua jucăriile (a,b), (a,c), (a,d), (b,c), (b,d), (c,d), (b,a), (c,a), (d,a), (c,b), (d,b), (d,c), în total 12 variante de alegere.

Rezolvare

# 1128  Jucarii
# Definim funcția de verificare a valorilor m și n
def verificare(m_val, n_val):
    # Verificăm dacă m și n respectă restricțiile problemei
    if 1 <= m_val <= 100000 and 1 <= n_val <= 100000:
        # Dacă valorile sunt valide, returnăm True
        return True
    else:
        # Dacă valorile nu sunt valide, ridicăm o excepție
        raise ValueError


# Definim funcția pentru calculul permutărilor
def permutari(n_val, m_val):
    # Definim funcția internă pentru calculul factorialului
    def factorial(num):
        # Dacă n este 0, returnăm 1 (cazul de bază al factorialului)
        if num == 0:
            return 1
        else:
            # Altfel, calculăm factorialul recursiv
            return num * factorial(num-1)

    # Calculăm și returnăm permutările folosind formula n! / (n-m)!
    return factorial(n_val) // factorial(n_val-m_val)


# Verificăm dacă acest script este rulat direct (nu este importat ca modul)
if __name__ == '__main__':
    try:
        # Citim numărul de copii
        m = int(input("Introduceti numarul de copii: "))
        # Citim numărul de jucării
        n = int(input("Introduceti numarul de jucarii: "))

        # Verificăm dacă datele introduse sunt valide
        if verificare(m, n):
            # Dacă datele sunt valide, afișăm un mesaj de confirmare
            print("Datele introduse corespund restricțiilor impuse.")

        # Calculăm și afișăm numărul de permutări
        print(permutari(n, m))

    # Tratăm cazul în care datele introduse nu sunt valide
    except ValueError:
        # Afișăm un mesaj de eroare
        print("Datele introduse nu corespund restricțiilor impuse.")