3512 - Factorial Query

From Bitnami MediaWiki
Revision as of 16:49, 23 March 2023 by Sovago Rares-Andrei (talk | contribs) (Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale. Să se calculeze produsul factorialelor acestora, modulo '''1.000.000.007''' == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", programul va afișa pe ecran produsul factorialelor celor n numere citite. În cazul în care datele nu re...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se dau n numere naturale. Să se calculeze produsul factorialelor acestora, modulo 1.000.000.007

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", programul va afișa pe ecran produsul factorialelor celor n numere citite. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 1.000.000
  • cele n numere sunt mai mici sau egale cu 10.000.000


Exemple

Exemplul 1

Intrare
4
4 2 1 3
Ieșire
Datele sunt introduse corect.
288

Exemplul 2

Intrare
-5
1 2 3
Ieșire
Datele nu corespund restricțiilor impuse.

Exemplul 3

Intrare
6
1 1 1 1 1 1
Ieșire
Datele sunt introduse corect.
1



Rezolvare

<syntaxhighlight lang="python" line="1">

  1. 3512 - Factorial Query

def validare_date(n, numere):

   # Verificăm dacă n se află între 1 și 1.000.000
   if n < 1 or n > 1000000:
       return False
   # Verificăm dacă fiecare număr din listă este mai mic sau egal cu 10.000.000
   for numar in numere:
       if numar > 10000000:
           return False
   # Datele sunt corecte
   return True


def factorial(n):

   # Returnează factorialul lui n, redus modular la 1.000.000.007
   produs = 1
   for i in range(1, n + 1):
       produs = (produs * i) % 1000000007
   return produs


def main():

   # Citim numărul n de la tastatură
   n_input = input("Introduceti numarul n: ")
   if not n_input:
       print("Introduceti un numar n mai mare decat 0.")
       return
   n = int(n_input)
   # Citim cele n numere de la tastatură
   numere_input = input("Introduceti cele n numere, separate prin spatiu: ")
   if not numere_input:
       print("Introduceti cel putin un numar.")
       return
   numere = list(map(int, numere_input.split()))
   # Validăm datele de intrare
   if not validare_date(n, numere):
       print("Datele nu corespund restricțiilor impuse.")
       return
   # Calculăm produsul factorialelor și îl reducem modular la 1.000.000.007
   produs = 1
   for numar in numere:
       produs = (produs * factorial(numar)) % 1000000007
   # Afișăm rezultatul
   print("Datele sunt introduse corect.")
   print(f"Produsul factorialelor este: {produs}")


if __name__ == "__main__":

   main()




</syntaxhighlight>