<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2250_-_Fact</id>
	<title>2250 - Fact - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2250_-_Fact"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2250_-_Fact&amp;action=history"/>
	<updated>2026-05-01T06:35:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2250_-_Fact&amp;diff=10025&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == Pentru un număr natural nenul, definim factorialul său ca fiind produsul tuturor numerelor naturale nenule mai mici sau egale decât el şi îl notăm N! (adică N! = 1*2*…*N). Pentru o bază de numeraţie B şi un număr natural nenul N, se cere determinarea ultimei cifre nenule a scrierii în baza B a lui N!. == Cerinţa == Se citesc 5 perechi de forma (Ni, Bi), unde 1 ≤ i ≤ 5. Pentru fiecare din cele 5 perechi citite, aflați ultima cifră nenulă a scr...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2250_-_Fact&amp;diff=10025&amp;oldid=prev"/>
		<updated>2024-06-03T17:05:53Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Pentru un număr natural nenul, definim factorialul său ca fiind produsul tuturor numerelor naturale nenule mai mici sau egale decât el şi îl notăm N! (adică N! = 1*2*…*N). Pentru o bază de numeraţie B şi un număr natural nenul N, se cere determinarea ultimei cifre nenule a scrierii în baza B a lui N!. == Cerinţa == Se citesc 5 perechi de forma (Ni, Bi), unde 1 ≤ i ≤ 5. Pentru fiecare din cele 5 perechi citite, aflați ultima cifră nenulă a scr...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Pentru un număr natural nenul, definim factorialul său ca fiind produsul tuturor numerelor naturale nenule mai mici sau egale decât el şi îl notăm N! (adică N! = 1*2*…*N). Pentru o bază de numeraţie B şi un număr natural nenul N, se cere determinarea ultimei cifre nenule a scrierii în baza B a lui N!.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se citesc 5 perechi de forma (Ni, Bi), unde 1 ≤ i ≤ 5. Pentru fiecare din cele 5 perechi citite, aflați ultima cifră nenulă a scrierii în baza Bi a factorialului numărului Ni.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare fact.in conţine 5 linii, pe fiecare dintre ele fiind scrise câte două numere naturale nenule Ni şi Bi, scrise în baza 10, despărţite printr-un spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire fact.out va conţine 5 linii. Pe linia i se va afla cifra corespunzătoare unei perechi (Ni, Bi), citită de pe linia i din fişierul de intrare.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ Ni ≤ 1.000.000, pentru 1 ≤ i ≤ 5&lt;br /&gt;
* 2 ≤ Bi ≤ 36, pentru 1 ≤ i ≤ 5;&lt;br /&gt;
* în cazul în care Bi &amp;gt; 10, cifrele mai mari decât 9 vor fi reprezentate prin litere mari ale alfabetului englez (10=&amp;#039;A&amp;#039;, 11=&amp;#039;B&amp;#039;, …, 35=&amp;#039;Z&amp;#039;);&lt;br /&gt;
* un test va fi punctat doar dacă toate cele cinci rezultate cerute sunt corecte.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; fact.in&lt;br /&gt;
 5 10&lt;br /&gt;
 7 10&lt;br /&gt;
 7 20&lt;br /&gt;
 8 16&lt;br /&gt;
 9 8&lt;br /&gt;
; fact.out&lt;br /&gt;
 2&lt;br /&gt;
 4&lt;br /&gt;
 C&lt;br /&gt;
 8&lt;br /&gt;
 6&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
5!=120, în baza 10, deci ultima cifră nenulă este 2&lt;br /&gt;
7!=5040, în baza 10, deci ultima cifră nenulă este 4&lt;br /&gt;
7!=CC0, în baza 20, deci ultima cifră nenulă este C&lt;br /&gt;
8!= 9D80, în baza 16, deci ultima cifră nenulă este 8&lt;br /&gt;
9!=1304600, în baza 8, deci ultima cifră nenulă este 6&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def last_nonzero_digit_factorial(N, B):&lt;br /&gt;
    # Calculează factorialul lui N&lt;br /&gt;
    factorial = 1&lt;br /&gt;
    for i in range(2, N + 1):&lt;br /&gt;
        factorial *= i&lt;br /&gt;
&lt;br /&gt;
    # Convertim factorialul în baza B&lt;br /&gt;
    factorial_base_B = &amp;quot;&amp;quot;&lt;br /&gt;
    while factorial &amp;gt; 0:&lt;br /&gt;
        remainder = factorial % B&lt;br /&gt;
        if remainder &amp;gt;= 10:&lt;br /&gt;
            factorial_base_B = chr(ord(&amp;#039;A&amp;#039;) + remainder - 10) + factorial_base_B&lt;br /&gt;
        else:&lt;br /&gt;
            factorial_base_B = str(remainder) + factorial_base_B&lt;br /&gt;
        factorial //= B&lt;br /&gt;
&lt;br /&gt;
    # Găsim ultima cifră nenulă&lt;br /&gt;
    for digit in reversed(factorial_base_B):&lt;br /&gt;
        if digit != &amp;#039;0&amp;#039;:&lt;br /&gt;
            return digit&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citim datele de intrare&lt;br /&gt;
    with open(&amp;quot;fact.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        pairs = [list(map(int, line.split())) for line in fin.readlines()]&lt;br /&gt;
&lt;br /&gt;
    # Determinăm ultima cifră nenulă pentru fiecare pereche&lt;br /&gt;
    results = [last_nonzero_digit_factorial(N, B) for N, B in pairs]&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatele în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;fact.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        for result in results:&lt;br /&gt;
            fout.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AjM</name></author>
	</entry>
</feed>