<?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=1550_-_DivFactorial</id>
	<title>1550 - DivFactorial - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1550_-_DivFactorial"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1550_-_DivFactorial&amp;action=history"/>
	<updated>2026-05-01T12:34:28Z</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=1550_-_DivFactorial&amp;diff=3499&amp;oldid=prev</id>
		<title>Csatari Mălina: Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1550/divfactorial 1550 - DivFactorial] ---- == Cerinţa == Se da un vector cu &#039;&#039;&#039;n&#039;&#039;&#039; elemente. Sa se afișeze pe ecran elementele din vector care divid factorialul numărului de elemente &#039;&#039;&#039;n&#039;&#039;&#039;. == Date de intrare == Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații. == Date de ieșire ==  Dacă datele sunt introduse corect, pe ecran se va afișa:  &#039;&#039;&#039;&quot;Datele sunt introduse co...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1550_-_DivFactorial&amp;diff=3499&amp;oldid=prev"/>
		<updated>2023-04-13T13:50:26Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1550/divfactorial 1550 - DivFactorial] ---- == Cerinţa == Se da un vector cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; elemente. Sa se afișeze pe ecran elementele din vector care divid factorialul numărului de elemente &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar apoi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale, separate prin spații. == Date de ieșire ==  Dacă datele sunt introduse corect, pe ecran se va afișa:  &amp;#039;&amp;#039;&amp;#039;&amp;quot;Datele sunt introduse co...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1550/divfactorial 1550 - DivFactorial]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se da un vector cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; elemente. Sa se afișeze pe ecran elementele din vector care divid factorialul numărului de elemente &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar apoi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale, separate prin spații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&amp;#039;&amp;#039;&amp;#039;, apoi pe un rând nou va afișa pe ecran elementele din vector care divid factorialul numărului de elemente n. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: &amp;#039;&amp;#039;&amp;#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; &amp;amp;les; 12&lt;br /&gt;
* cele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere citite vor fi mai mici decât &amp;#039;&amp;#039;&amp;#039;1.000.000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* pentru toate testele va exista cel puțin un element al vectorului care divide &amp;#039;&amp;#039;&amp;#039;n!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
===Exemplul 1===&lt;br /&gt;
; Intrare&lt;br /&gt;
: 5&lt;br /&gt;
: 16 3 71 30 25&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3 30&lt;br /&gt;
===Explicație exemplul 1===&lt;br /&gt;
: Factorialul numărului de elemente &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; este &amp;#039;&amp;#039;&amp;#039;120&amp;#039;&amp;#039;&amp;#039;. Elementele din vector care îl divid pe &amp;#039;&amp;#039;&amp;#039;120&amp;#039;&amp;#039;&amp;#039; sunt &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;30&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
===Exemplul 2===&lt;br /&gt;
; Intrare&lt;br /&gt;
: 13&lt;br /&gt;
: 1 2 3 4 5 6 7 8 9 10 11 12 13&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1550 DivFactorial&lt;br /&gt;
&lt;br /&gt;
def factorial(n):&lt;br /&gt;
    if n == 0 or n == 1:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        return n * factorial(n-1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def afis_elem_div_cu_n_factorial(vector):&lt;br /&gt;
    factorial_n = factorial(n)&lt;br /&gt;
    elemente_divizibile = []&lt;br /&gt;
    for element in vector:&lt;br /&gt;
        if factorial_n % element == 0:&lt;br /&gt;
            elemente_divizibile.append(element)&lt;br /&gt;
    print(&amp;#039; &amp;#039;.join(map(str, elemente_divizibile)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citire_conform_restrictiilor(n, vector):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 12:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    for element in vector:&lt;br /&gt;
        if element &amp;gt;= 1000000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    if n != len(vector):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    vector = list(map(int, input().split()))&lt;br /&gt;
    citire_conform_restrictiilor(n, vector)&lt;br /&gt;
    afis_elem_div_cu_n_factorial(vector)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație rezolvare ==&lt;br /&gt;
    În blocul &amp;#039;&amp;#039;&amp;#039;if __name__ == &amp;#039;__main__&amp;#039; &amp;#039;&amp;#039;&amp;#039;: se efectuează citirea de la tastatură a valorilor pentru n și vector (liniile 34, 35), apoi se apelează funcția citire_conform_restrictiilor() pentru a verifica conformitatea datelor introduse cu restricțiile impuse. Apoi, se apelează funcția afis_elem_div_cu_n_factorial() pentru a calcula și afișa elementele din vector care divid factorialul numărului n citit.&amp;lt;br&amp;gt;   Funcția &amp;#039;&amp;#039;&amp;#039;factorial(n)&amp;#039;&amp;#039;&amp;#039; primește un argument n și calculează factorialul acestuia folosind o implementare recursivă. Dacă n este 0 sau 1, se returnează 1, altfel se returnează n multiplicat cu factorialul lui n-1. Aceasta este o implementare obișnuită a formulei matematice pentru factorial.&amp;lt;br&amp;gt;   Funcția &amp;#039;&amp;#039;&amp;#039;afis_elem_div_cu_n_factorial(vector)&amp;#039;&amp;#039;&amp;#039; primește ca argument un vector de numere și calculează factorialul numărului n citit anterior (presupus a fi definit global), apoi parcurge vectorul de numere și afișează elementele care divid acest factorial. Elementele care divid factorialul sunt adăugate într-o listă elemente_divizibile utilizând un loop for și operatorul de modulo % pentru a verifica dacă un număr este divizibil cu factorialul calculat. La final, lista de elemente este afișată utilizând funcția print(), metoda join() pentru a le separa prin spații și funcția map() pentru a le converti în string-uri.&amp;lt;br&amp;gt;   Funcția &amp;#039;&amp;#039;&amp;#039;citire_conform_restrictiilor(n, vector)&amp;#039;&amp;#039;&amp;#039; primește ca argumente n și vector și verifică dacă valorile acestora sunt conforme cu restricțiile impuse de problema. Dacă n nu se află în intervalul [1, 12], sau cel puțin un element din vector este mai mare sau egal cu 1.000.000, sau numărul de elemente din vector nu este egal cu n, atunci se afișează &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;. și se încheie execuția programului utilizând funcția exit(). Altfel, se afișează &amp;quot;Datele sunt introduse corect.&amp;quot; și se continuă programul conform main-ului.&lt;/div&gt;</summary>
		<author><name>Csatari Mălina</name></author>
	</entry>
</feed>