0440 - Fact Zero 1

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se citește un număr natural n. Să se determine ultima cifră nenulă din scrierea zecimală a numărului n!.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numărul C, reprezentând ultima cifră nenulă din scrierea zecimală a numărului n!.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000
  • n! = 1 * 2 * ... * n

Exemplu[edit | edit source]

Intrare
13
Ieșire
8

Explicație[edit | edit source]

13! = 6227020800, iar ultima cifră nenulă este 8.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare_date(n):

   if n < 1 or n > 1000:
       return False
   return True

if __name__ == '__main__':

   n = int(input("Introduceți numărul n: "))
   if validare_date(n):
       # Inițializăm contoarele pentru factorii 2 și 5
       nr_factori_2 = 0
       nr_factori_5 = 0
       # Calculăm numărul de factori ai lui 2 și 5 din descompunerea factorialului
       for i in range(2, n+1):
           x = i
           while x % 2 == 0:
               nr_factori_2 += 1
               x //= 2
           while x % 5 == 0:
               nr_factori_5 += 1
               x //= 5
       # Determinăm ultima cifră nenulă
       if nr_factori_2 > nr_factori_5:
           ultima_cifra_nenula = 8
       elif nr_factori_5 > nr_factori_2:
           ultima_cifra_nenula = 5
       else:
           ultima_cifra_nenula = 6
       print("Ultima cifră nenulă a lui", n, "! este", ultima_cifra_nenula)
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Pentru a determina ultima cifră nenulă din descompunerea factorialului numărului n, trebuie să determinăm câți factori primi 2 și câți factori primi 5 sunt în descompunerea factorialului și să comparăm aceste valori. Pentru a implementa această soluție în Python, putem citi numărul n de la tastatură și apoi putem calcula numărul de factori primi 2 și 5 din descompunerea factorialului folosind o buclă for și două bucle while. După ce am calculat numărul de factori primi 2 și 5, putem compara aceste valori și să determinăm ultima cifră nenulă. Pentru a ne asigura că datele de intrare respectă restricțiile impuse, putem defini o funcție separată de validare a datelor și să apelăm această funcție înainte de a efectua calculul și afișarea rezultatului.