<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Paul+Matei</id>
	<title>Bitnami MediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Paul+Matei"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Paul_Matei"/>
	<updated>2026-05-01T05:33:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15678&amp;diff=9481</id>
		<title>15678</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15678&amp;diff=9481"/>
		<updated>2024-01-16T08:42:38Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15678 (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Aflați toate numerele de forma &#039;&#039;&amp;lt;math&amp;gt;\overline{abcd}&amp;lt;/math&amp;gt;&#039;&#039;pentru care&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\overline{abcd} = 2021+5(a-c+b-d+1).&amp;lt;/math&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ultima cifră numărului 5(a-c+b-d+1) poate fi 0 sau 5.Atunci ultima cifră a numărului 2021+5(a-c+b-d+1) poate fi 1 sau 6,de unde deducem că d=1 sau d=6.Pentru d=1 relația devine &#039;&#039;&amp;lt;math&amp;gt;\overline{abcd}&amp;lt;/math&amp;gt;&#039;&#039;= 2021+5(a-c+b).Deoarece a-c+b≤18 avem 2021+5(a-c+b)≤2111 și, cum &#039;&#039;&amp;lt;math&amp;gt;\overline{abcd}&amp;lt;/math&amp;gt;&#039;&#039;= 2021+5(a-c+b), obținem a≤2.Pentru a=2 relația dată devine &#039;&#039;&amp;lt;math&amp;gt;\overline{2bc1}&amp;lt;/math&amp;gt;&#039;&#039;= 2021+5(2-c+b)sau 2001+100b+10c=2031-5c+5b,de unde 95b+15c=30.De aici b=0 și c=2.Numărul căutat este 2021.Pentru a=1 nu obținem nicio soluție.Pentru d=6 relația dată devine &#039;&#039;&amp;lt;math&amp;gt;\overline{abc6}&amp;lt;/math&amp;gt;&#039;&#039;= 2021+5(a-c+b-5).Deoarece a-c+b-5≤13 avem 2021+5(a-c+b)≤2086 și cum &#039;&#039;&amp;lt;math&amp;gt;\overline{abc6}&amp;lt;/math&amp;gt;&#039;&#039;= 2021+5(a-c+b-5),obținem a≤2.Pentru a=2 relația dată devine &#039;&#039;&amp;lt;math&amp;gt;\overline{2bc6}&amp;lt;/math&amp;gt;&#039;&#039;= 2021+5(2-c+b-5) sau 2006+100b+10c=2006-5c+5b,de unde 95b+15c=0.De aici b=0 și c=0.Numărul căutat este 2006.Pentru a=1 nu obținem nicio soluție.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15678&amp;diff=9476</id>
		<title>15678</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15678&amp;diff=9476"/>
		<updated>2024-01-16T07:47:49Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15678 (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Aflați toate numerele de forma &#039;&#039;&amp;lt;math&amp;gt;\overline{abcd}&amp;lt;/math&amp;gt;&#039;&#039;pentru care&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\overline{abcd} = 2021+5(a-c+b-d+1).&amp;lt;/math&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ultima cifră numărului 5(a-c+b-d+1) poate fi 0 sau 5.Atunci ultima cifră a numărului 2021+5(a-c+b-d+1) poate fi 1 sau 6,de unde deducem că d=1 sau d=6.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=14441&amp;diff=9472</id>
		<title>14441</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=14441&amp;diff=9472"/>
		<updated>2024-01-16T07:39:25Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Paul Matei a redenumit pagina 14441 în 15678&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECTEAZA [[15678]]&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15678&amp;diff=9471</id>
		<title>15678</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15678&amp;diff=9471"/>
		<updated>2024-01-16T07:39:24Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Paul Matei a redenumit pagina 14441 în 15678&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;14441 (Constantin Apostol, Rm. Sărat)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arătați că oricare ar fi cifrele &#039;&#039; &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; &#039;&#039; și &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, numărul  &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt;  are un număr par de divizori naturali.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Se știe că un număr natural cu un număr impar de divizori este pătrat perfect.De asemenea, un pătrat perfect care are cifra unităților 5 are cifra zecilor 2.Cu acestea, dacă presupunem că numărul &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt; are un număr impar de divizori, atunci el este pătrat perfect-fals.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=User:Paul_Matei&amp;diff=9462</id>
		<title>User:Paul Matei</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=User:Paul_Matei&amp;diff=9462"/>
		<updated>2024-01-13T16:52:05Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Paul Matei a redenumit pagina Utilizator:Paul Matei în 14441&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECTEAZA [[14441]]&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15678&amp;diff=9461</id>
		<title>15678</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15678&amp;diff=9461"/>
		<updated>2024-01-13T16:52:05Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Paul Matei a redenumit pagina Utilizator:Paul Matei în 14441&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;14441 (Constantin Apostol, Rm. Sărat)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arătați că oricare ar fi cifrele &#039;&#039; &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; &#039;&#039; și &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, numărul  &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt;  are un număr par de divizori naturali.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Se știe că un număr natural cu un număr impar de divizori este pătrat perfect.De asemenea, un pătrat perfect care are cifra unităților 5 are cifra zecilor 2.Cu acestea, dacă presupunem că numărul &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt; are un număr impar de divizori, atunci el este pătrat perfect-fals.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15678&amp;diff=9460</id>
		<title>15678</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15678&amp;diff=9460"/>
		<updated>2024-01-13T16:33:46Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: &amp;#039;&amp;#039;&amp;#039;14441 (Constantin Apostol, Rm. Sărat)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Arătați că oricare ar fi cifrele &amp;#039;&amp;#039; &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; &amp;#039;&amp;#039; și &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, numărul  &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt;  are un număr par de divizori naturali.&amp;#039;&amp;#039;   &amp;#039;&amp;#039;&amp;#039;Soluție:&amp;#039;&amp;#039;&amp;#039;   &amp;#039;&amp;#039;Se știe că un număr natural cu un număr impar de divizori este pătrat perfect.De asemenea, un pătrat perfect care are cifra unităților 5 are cifra zecilor 2.Cu acestea, dacă presupunem că numărul &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt; are un număr i...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;14441 (Constantin Apostol, Rm. Sărat)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arătați că oricare ar fi cifrele &#039;&#039; &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; &#039;&#039; și &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, numărul  &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt;  are un număr par de divizori naturali.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Se știe că un număr natural cu un număr impar de divizori este pătrat perfect.De asemenea, un pătrat perfect care are cifra unităților 5 are cifra zecilor 2.Cu acestea, dacă presupunem că numărul &amp;lt;math&amp;gt;\overline{ab15}&amp;lt;/math&amp;gt; are un număr impar de divizori, atunci el este pătrat perfect-fals.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0440_-_Fact_Zero_1&amp;diff=5400</id>
		<title>0440 - Fact Zero 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0440_-_Fact_Zero_1&amp;diff=5400"/>
		<updated>2023-04-29T12:43:02Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se citește un număr natural &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Să se determine ultima cifră nenulă din scrierea zecimală a numărului &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;. == Date de ieşire == Programul afișează pe ecran numărul &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;, reprezentând ultima cifră nenulă din scrierea zecimală a numărului &amp;#039;&amp;#039;&amp;#039;n!&amp;#039;&amp;#039;&amp;#039;. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039; *&amp;#039;&amp;#039;&amp;#039;n! = 1 * 2 * ... * n&amp;#039;&amp;#039;&amp;#039; == Exemplu == ; Intrare :13...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citește un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se determine ultima cifră nenulă din scrierea zecimală a numărului &#039;&#039;&#039;n!&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând ultima cifră nenulă din scrierea zecimală a numărului &#039;&#039;&#039;n!&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n! = 1 * 2 * ... * n&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:13&lt;br /&gt;
; Ieșire&lt;br /&gt;
:8&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;13! = 6227020800&#039;&#039;&#039;, iar ultima cifră nenulă este &#039;&#039;&#039;8&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        # Inițializăm contoarele pentru factorii 2 și 5&lt;br /&gt;
        nr_factori_2 = 0&lt;br /&gt;
        nr_factori_5 = 0&lt;br /&gt;
&lt;br /&gt;
        # Calculăm numărul de factori ai lui 2 și 5 din descompunerea factorialului&lt;br /&gt;
        for i in range(2, n+1):&lt;br /&gt;
            x = i&lt;br /&gt;
            while x % 2 == 0:&lt;br /&gt;
                nr_factori_2 += 1&lt;br /&gt;
                x //= 2&lt;br /&gt;
            while x % 5 == 0:&lt;br /&gt;
                nr_factori_5 += 1&lt;br /&gt;
                x //= 5&lt;br /&gt;
&lt;br /&gt;
        # Determinăm ultima cifră nenulă&lt;br /&gt;
        if nr_factori_2 &amp;gt; nr_factori_5:&lt;br /&gt;
            ultima_cifra_nenula = 8&lt;br /&gt;
        elif nr_factori_5 &amp;gt; nr_factori_2:&lt;br /&gt;
            ultima_cifra_nenula = 5&lt;br /&gt;
        else:&lt;br /&gt;
            ultima_cifra_nenula = 6&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Ultima cifră nenulă a lui&amp;quot;, n, &amp;quot;! este&amp;quot;, ultima_cifra_nenula)&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
Pentru a determina ultima cifră nenulă din descompunerea factorialului numărului &#039;&#039;&#039;n&#039;&#039;&#039;, trebuie să determinăm câți factori primi &#039;&#039;&#039;2&#039;&#039;&#039; și câți factori primi &#039;&#039;&#039;5&#039;&#039;&#039; sunt în descompunerea factorialului și să comparăm aceste valori. Pentru a implementa această soluție în Python, putem citi numărul &#039;&#039;&#039;n&#039;&#039;&#039; de la tastatură și apoi putem calcula numărul de factori primi &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;5&#039;&#039;&#039; din descompunerea factorialului folosind o buclă for și două bucle &#039;&#039;&#039;while&#039;&#039;&#039;. După ce am calculat numărul de factori primi &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;5&#039;&#039;&#039;, 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.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0439_-_Fact_Zero&amp;diff=5399</id>
		<title>0439 - Fact Zero</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0439_-_Fact_Zero&amp;diff=5399"/>
		<updated>2023-04-29T12:27:17Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se citește un număr natural &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Să se determine numărul de zerouri de la sfârșitul scrierii zecimale a numărului &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;. == Date de ieşire == Programul afișează pe ecran numărul &amp;#039;&amp;#039;&amp;#039;Z&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de zerouri de la sfârșitul scrierii zecimale a numărului &amp;#039;&amp;#039;&amp;#039;n!&amp;#039;&amp;#039;&amp;#039;. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039; *&amp;#039;&amp;#039;&amp;#039;n! = 1 * 2 * ... * n&amp;#039;&amp;#039;&amp;#039; == Exe...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citește un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se determine numărul de zerouri de la sfârșitul scrierii zecimale a numărului &#039;&#039;&#039;n!&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;Z&#039;&#039;&#039;, reprezentând numărul de zerouri de la sfârșitul scrierii zecimale a numărului &#039;&#039;&#039;n!&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n! = 1 * 2 * ... * n&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:13&lt;br /&gt;
; Ieșire&lt;br /&gt;
:2&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;13! = 6227020800&#039;&#039;&#039;, deci se termină cu &#039;&#039;&#039;2&#039;&#039;&#039; zerouri.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 10**5:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def calculeaza_puteri(n):&lt;br /&gt;
    nr5 = 0&lt;br /&gt;
    nr2 = 0&lt;br /&gt;
&lt;br /&gt;
    i = 5&lt;br /&gt;
    while i &amp;lt;= n:&lt;br /&gt;
        nr5 += n // i&lt;br /&gt;
        i *= 5&lt;br /&gt;
&lt;br /&gt;
    i = 2&lt;br /&gt;
    while i &amp;lt;= n:&lt;br /&gt;
        nr2 += n // i&lt;br /&gt;
        i *= 2&lt;br /&gt;
&lt;br /&gt;
    if nr5 &amp;lt;= nr2:&lt;br /&gt;
        return nr5&lt;br /&gt;
    else:&lt;br /&gt;
        return nr2&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti n: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        putere = calculeaza_puteri(n)&lt;br /&gt;
        print(f&amp;quot;Puterea minima de 2 sau 5 care divide n! fara rest este: {putere}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
Acest cod calculează puterea minimă de &#039;&#039;&#039;2&#039;&#039;&#039; sau &#039;&#039;&#039;5&#039;&#039;&#039; care divide &#039;&#039;&#039;n!&#039;&#039;&#039; fără rest, unde &#039;&#039;&#039;n&#039;&#039;&#039; este un număr dat de la tastatură. Codul verifică mai întâi dacă intrarea este validă, apoi folosește două bucle &#039;&#039;&#039;while&#039;&#039;&#039; pentru a calcula numărul de factori de &#039;&#039;&#039;5&#039;&#039;&#039; și &#039;&#039;&#039;2&#039;&#039;&#039; care împart &#039;&#039;&#039;n!&#039;&#039;&#039; fără rest. La final, codul compară cele două numere de factori și afișează cel mai mic dintre ele ca putere minimă de &#039;&#039;&#039;2&#039;&#039;&#039; sau &#039;&#039;&#039;5&#039;&#039;&#039; care divide &#039;&#039;&#039;n!&#039;&#039;&#039; fără rest.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2769_-_Trei_Prime&amp;diff=5398</id>
		<title>2769 - Trei Prime</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2769_-_Trei_Prime&amp;diff=5398"/>
		<updated>2023-04-29T12:09:26Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dă un număr natural &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; care este produs de trei numere prime distincte. Ştiind că există &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; numere naturale prime cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; şi mai mici decât acesta, să se afişeze în ordine crescătoare cele trei numere prime din descompunerea lui &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; şi &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;. == Date de ieşire == Programul va afișa pe ecran numerele prime din descompunerea lui &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. == Restricții...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; care este produs de trei numere prime distincte. Ştiind că există &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale prime cu &#039;&#039;&#039;n&#039;&#039;&#039; şi mai mici decât acesta, să se afişeze în ordine crescătoare cele trei numere prime din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;m&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numerele prime din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ m ≤ n ≤ 10*18&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:66 20&lt;br /&gt;
; Ieșire&lt;br /&gt;
:2 3 11&lt;br /&gt;
== Explicație == &lt;br /&gt;
Avem &#039;&#039;&#039;66=2•3•11&#039;&#039;&#039; şi există &#039;&#039;&#039;20&#039;&#039;&#039; de numere prime cu &#039;&#039;&#039;66&#039;&#039;&#039;, mai mici decât acesta.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, m):&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= n &amp;lt;= 10**18):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citim valorile de la tastatură&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul n: &amp;quot;))&lt;br /&gt;
    m = int(input(&amp;quot;Introduceti numarul m: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    # Validăm datele de intrare&lt;br /&gt;
    if not validare_date(n, m):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Initializam variabilele&lt;br /&gt;
        factori = []&lt;br /&gt;
        numar_prim = 0&lt;br /&gt;
&lt;br /&gt;
        # Factorizam numarul n&lt;br /&gt;
        while n &amp;gt; 1:&lt;br /&gt;
            for i in range(2, int(math.sqrt(n))+1):&lt;br /&gt;
                if n % i == 0:&lt;br /&gt;
                    factori.append(i)&lt;br /&gt;
                    n //= i&lt;br /&gt;
                    break&lt;br /&gt;
            else:&lt;br /&gt;
                factori.append(n)&lt;br /&gt;
                n //= n&lt;br /&gt;
&lt;br /&gt;
        # Numaram factorii primi care sunt mai mici decat n si sunt, de asemenea, primi&lt;br /&gt;
        for factor in factori:&lt;br /&gt;
            if factor &amp;lt; n and all(factor % i != 0 for i in range(2, int(math.sqrt(factor))+1)):&lt;br /&gt;
                numar_prim += 1&lt;br /&gt;
&lt;br /&gt;
        # Afisam cei trei factori primi distincti ai lui n in ordine crescatoare&lt;br /&gt;
        print(sorted(set(factori))[:3])&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&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;
Acest program calculează factorii primi ai unui număr natural dat și afișează cele trei numere prime distincte care alcătuiesc acel număr, precum și numărul de numere prime mai mici decât numărul dat și le afișează pe ecran. Programul verifică mai întâi dacă datele de intrare sunt valide și apoi factorizează numărul dat pentru a găsi factorii primi. În cele din urmă, programul afișează cele trei numere prime distincte din lista factorilor primi și confirmă că datele de intrare sunt valide.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3308_-_N_Div_Tri&amp;diff=5397</id>
		<title>3308 - N Div Tri</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3308_-_N_Div_Tri&amp;diff=5397"/>
		<updated>2023-04-29T11:55:19Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Șirul numerelor triunghiulare e obținut prin adunarea numerelor naturale. Deci al șaptelea număr triunghiular e &amp;#039;&amp;#039;&amp;#039;1 + 2 + 3 + 4 + 5 + 6 + 7 = 28&amp;#039;&amp;#039;&amp;#039;. Primii &amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039; termeni din șir sunt: &amp;#039;&amp;#039;&amp;#039;1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...&amp;#039;&amp;#039;&amp;#039; Să listăm toți divizorii primelor &amp;#039;&amp;#039;&amp;#039;7&amp;#039;&amp;#039;&amp;#039; numere triunghiulare:  &amp;#039;&amp;#039;&amp;#039;1: 1  3: 1,3  6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28&amp;#039;&amp;#039;&amp;#039;  Se poate observa că &amp;#039;&amp;#039;&amp;#039;28&amp;#039;&amp;#039;&amp;#039; e primul număr triunghiular care are...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Șirul numerelor triunghiulare e obținut prin adunarea numerelor naturale. Deci al șaptelea număr triunghiular e &#039;&#039;&#039;1 + 2 + 3 + 4 + 5 + 6 + 7 = 28&#039;&#039;&#039;. Primii &#039;&#039;&#039;10&#039;&#039;&#039; termeni din șir sunt: &#039;&#039;&#039;1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...&#039;&#039;&#039;&lt;br /&gt;
Să listăm toți divizorii primelor &#039;&#039;&#039;7&#039;&#039;&#039; numere triunghiulare:&lt;br /&gt;
 &#039;&#039;&#039;1: 1&lt;br /&gt;
 3: 1,3&lt;br /&gt;
 6: 1,2,3,6&lt;br /&gt;
10: 1,2,5,10&lt;br /&gt;
15: 1,3,5,15&lt;br /&gt;
21: 1,3,7,21&lt;br /&gt;
28: 1,2,4,7,14,28&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Se poate observa că &#039;&#039;&#039;28&#039;&#039;&#039; e primul număr triunghiular care are mai mult de &#039;&#039;&#039;5&#039;&#039;&#039; divizori.&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se scrie un program care determină &#039;&#039;&#039;primul număr triunghiular&#039;&#039;&#039; cu mai mult de &#039;&#039;&#039;n&#039;&#039;&#039; divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;x&#039;&#039;&#039;, reprezentând primul număr triunghiular care are mai mult de &#039;&#039;&#039;n&#039;&#039;&#039; divizori.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 1000&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:3&lt;br /&gt;
; Ieșire&lt;br /&gt;
:6&lt;br /&gt;
== Explicație == &lt;br /&gt;
Primul număr trunghiular care are mai mult de &#039;&#039;&#039;3&#039;&#039;&#039; divizori este &#039;&#039;&#039;6&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:1&lt;br /&gt;
; Ieșire&lt;br /&gt;
:3&lt;br /&gt;
== Explicație == &lt;br /&gt;
Primul număr trunghiular care are mai mult de un divizor este &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:133&lt;br /&gt;
; Ieșire&lt;br /&gt;
:437580&lt;br /&gt;
== Explicație == &lt;br /&gt;
Primul număr trunghiular care are mai mult de &#039;&#039;&#039;133&#039;&#039;&#039; de divizori este &#039;&#039;&#039;437580&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def numar_divizori(n):&lt;br /&gt;
    numar = 0&lt;br /&gt;
    for i in range(1, int(n**0.5)+1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            if n/i == i:&lt;br /&gt;
                numar += 1&lt;br /&gt;
            else:&lt;br /&gt;
                numar += 2&lt;br /&gt;
    return numar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if n.isdigit() and 1 &amp;lt;= int(n) &amp;lt;= 1000:&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceti n: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        numar = 1&lt;br /&gt;
        index = 2&lt;br /&gt;
&lt;br /&gt;
        while numar_divizori(numar) &amp;lt;= int(n):&lt;br /&gt;
            numar += index&lt;br /&gt;
            index += 1&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Primul număr triunghiular cu mai mult de&amp;quot;, n, &amp;quot;divizori este:&amp;quot;, numar)&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;
Acest program găsește primul număr triunghiular care are mai mult de &#039;&#039;&#039;n&#039;&#039;&#039; divizori. Folosind o buclă &#039;&#039;&#039;while&#039;&#039;&#039;, programul calculează numerele triunghiulare și numără divizorii acestora până când se găsește primul număr triunghiular care are mai mult de &#039;&#039;&#039;n&#039;&#039;&#039; divizori. Pentru a se asigura că datele de intrare sunt valide, programul include o funcție care verifică dacă &#039;&#039;&#039;n&#039;&#039;&#039; se află în intervalul specificat.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2608_-_Bi_Prime&amp;diff=5395</id>
		<title>2608 - Bi Prime</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2608_-_Bi_Prime&amp;diff=5395"/>
		<updated>2023-04-29T11:33:46Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dă &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; un număr natural care este produsul a două numere prime distincte, şi &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; reprezentând numărul numerelor mai mici sau egale cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, prime cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Aflaţi cele două numere prime din descompunerea lui &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; şi &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;. == Date de ieşire == Programul va afișa pe ecran numerele prime din descompunerea lui &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, în ordine crescătoare, separate prin...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă &#039;&#039;&#039;n&#039;&#039;&#039; un număr natural care este produsul a două numere prime distincte, şi &#039;&#039;&#039;m&#039;&#039;&#039; reprezentând numărul numerelor mai mici sau egale cu &#039;&#039;&#039;n&#039;&#039;&#039;, prime cu &#039;&#039;&#039;n&#039;&#039;&#039;. Aflaţi cele două numere prime din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;m&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numerele prime din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039;, în ordine crescătoare, separate prin spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ m ≤ n ≤ 10*25&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:8777 8580&lt;br /&gt;
; Ieșire&lt;br /&gt;
:67 131&lt;br /&gt;
== Explicație == &lt;br /&gt;
Avem &#039;&#039;&#039;8777=67•131&#039;&#039;&#039;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
# functie pentru a calcula cel mai mare divizor comun&lt;br /&gt;
def cmmdc(a, b):&lt;br /&gt;
    if b == 0:&lt;br /&gt;
        return a&lt;br /&gt;
    return cmmdc(b, a % b)&lt;br /&gt;
&lt;br /&gt;
# functie pentru a determina un factor al lui n folosind metoda lui Pollard-Rho&lt;br /&gt;
def pollard_rho(n):&lt;br /&gt;
    x = 2&lt;br /&gt;
    y = 2&lt;br /&gt;
    d = 1&lt;br /&gt;
    while d == 1:&lt;br /&gt;
        x = (x * x + 1) % n&lt;br /&gt;
        y = (y * y + 1) % n&lt;br /&gt;
        y = (y * y + 1) % n&lt;br /&gt;
        d = cmmdc(abs(x - y), n)&lt;br /&gt;
    return d&lt;br /&gt;
&lt;br /&gt;
# functie pentru a valida datele de intrare&lt;br /&gt;
def validare_date(n, m):&lt;br /&gt;
    if n &amp;lt; 1 or m &amp;lt; 1 or n &amp;gt; 10**25 or m &amp;gt; n:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # citim numerele n si m de la tastatura&lt;br /&gt;
    n, m = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    # validam datele de intrare&lt;br /&gt;
    if validare_date(n, m):&lt;br /&gt;
        # factorizam n folosind metoda lui Pollard-Rho&lt;br /&gt;
        factor1 = pollard_rho(n)&lt;br /&gt;
        factor2 = n // factor1&lt;br /&gt;
&lt;br /&gt;
        # calculam numarul de numere prime mai mici sau egale cu n, prime cu n&lt;br /&gt;
        phi = (factor1 - 1) * (factor2 - 1)&lt;br /&gt;
&lt;br /&gt;
        # afisam cei doi factori primi ai lui n in ordine crescatoare&lt;br /&gt;
        print(min(factor1, factor2), max(factor1, factor2))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4305_-_Chimie_1&amp;diff=5390</id>
		<title>4305 - Chimie 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4305_-_Chimie_1&amp;diff=5390"/>
		<updated>2023-04-29T11:19:00Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Mateo este elev în clasa a 9-a și este pasionat atât de chimie cât și de informatică. El folosește de obicei două substanțe standard în cantități ce reprezintă două numere prime distincte, și a descoperit că anumite substanțe au în compoziție una sau chiar cele două substanțe standard în cantități ce reprezintă produsul cantităților celor două substanțe standard sau puteri ale acestora. El are în laborator un set de recipiente cu s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Mateo este elev în clasa a 9-a și este pasionat atât de chimie cât și de informatică. El folosește de obicei două substanțe standard în cantități ce reprezintă două numere prime distincte, și a descoperit că anumite substanțe au în compoziție una sau chiar cele două substanțe standard în cantități ce reprezintă produsul cantităților celor două substanțe standard sau puteri ale acestora. El are în laborator un set de recipiente cu substanțe diferite și dorește să afle care este substanța de cantitate maximă care să aibă în componență una sau chiar cele două substanțe standard și de câte ori se regăsește această substanță de cantitate maximă.&lt;br /&gt;
Pentru a-l ajuta pe Mateo căutați într-un sir de &#039;&#039;&#039;n&#039;&#039;&#039; numere cel mai mare element care are maximum doi divizori factori primi &#039;&#039;&#039;d1 si d2&#039;&#039;&#039;, reprezentând cele două substanțe standard și afișați de câte ori apare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;chimie1.in&#039;&#039;&#039; conține pe prima linie trei parametrii &#039;&#039;&#039;n&#039;&#039;&#039;, &#039;&#039;&#039;d1 și d2&#039;&#039;&#039; cu semnificația din enunț, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;chimie1.out&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;m&#039;&#039;&#039;, reprezentând cel mai mare număr care respectă cerința și o variabilă &#039;&#039;&#039;ap&#039;&#039;&#039; care reprezintă numărul său de apariții. Dacă nu există niciun număr care respectă cerința se afișează mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;lt; d1 &amp;lt; d2 &amp;lt; 33.000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare sunt naturale și vor fi mai mici decât &#039;&#039;&#039;33000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
;  &#039;&#039;&#039;chimie1.in&#039;&#039;&#039;&lt;br /&gt;
:6 5 7&lt;br /&gt;
4 35 5 175 23 175&lt;br /&gt;
; &#039;&#039;&#039;chimie1.out&#039;&#039;&#039;&lt;br /&gt;
:175 2&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;175&#039;&#039;&#039; este format din &#039;&#039;&#039;5&#039;&#039;&#039; la puterea &#039;&#039;&#039;2&#039;&#039;&#039; si &#039;&#039;&#039;7&#039;&#039;&#039; la puterea &#039;&#039;&#039;1&#039;&#039;&#039;. Mai apar în șir numere care respectă cerința, dar &#039;&#039;&#039;175&#039;&#039;&#039; este cel mai mare.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n, d1, d2, numere):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1000000 and 1 &amp;lt; d1 &amp;lt; d2 &amp;lt; 33000 and all(numar &amp;lt; 33000 for numar in numere)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # citire date din fisier&lt;br /&gt;
    with open(&#039;chimie1.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n, d1, d2 = map(int, f.readline().split())&lt;br /&gt;
        numere = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # validare date&lt;br /&gt;
    if not validare_date(n, d1, d2, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    # calculare rezultat&lt;br /&gt;
    numere_aparitii = {}&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        if numar % d1 == 0 or numar % d2 == 0:&lt;br /&gt;
            # numarul are unul dintre divizorii cautati&lt;br /&gt;
            factori = set()&lt;br /&gt;
            if numar % d1 == 0:&lt;br /&gt;
                factori.add(d1)&lt;br /&gt;
                numar //= d1&lt;br /&gt;
            if numar % d2 == 0:&lt;br /&gt;
                factori.add(d2)&lt;br /&gt;
                numar //= d2&lt;br /&gt;
            if numar == 1 and len(factori) &amp;lt;= 2:&lt;br /&gt;
                # numarul are maxim 2 factori primi si are cel putin unul dintre divizorii cautati&lt;br /&gt;
                numere_aparitii[numar] = numere_aparitii.get(numar, 0) + 1&lt;br /&gt;
&lt;br /&gt;
    # afisare rezultat&lt;br /&gt;
    if not numere_aparitii:&lt;br /&gt;
        print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        max_numar = max(numere_aparitii.keys())&lt;br /&gt;
        ap_max = numere_aparitii[max_numar]&lt;br /&gt;
        print(max_numar, ap_max)&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 acest cod se caută cel mai mare număr dintr-o listă care are cel puțin unul dintre doi divizori specificați, iar acest număr trebuie să aibă cel mult doi factori primi. Se verifică în prealabil dacă datele de intrare corespund restricțiilor impuse, se trece prin toate numerele din listă și se verifică condiția impusă, iar la final se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0258_-_Det_Prim&amp;diff=5387</id>
		<title>0258 - Det Prim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0258_-_Det_Prim&amp;diff=5387"/>
		<updated>2023-04-29T11:04:07Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau două numere naturale &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; şi &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;a≤b&amp;#039;&amp;#039;&amp;#039;. Să se determine, dacă există, un număr prim &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; care aparţine intervalului închis &amp;#039;&amp;#039;&amp;#039;[a,b]&amp;#039;&amp;#039;&amp;#039; pentru care valoarea expresiei &amp;#039;&amp;#039;&amp;#039;|b+a-2*x|&amp;#039;&amp;#039;&amp;#039; este minimă, unde &amp;#039;&amp;#039;&amp;#039;|m|&amp;#039;&amp;#039;&amp;#039; este valoarea absolută a numărului întreg &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;. Dacă nu există nici un astfel de număr, se va afişa mesajul &amp;#039;&amp;#039;&amp;#039;NU EXISTA&amp;#039;&amp;#039;&amp;#039;, iar dacă există mai multe se va afişa cel mai mic. == Date de intrare == Programul c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale &#039;&#039;&#039;a&#039;&#039;&#039; şi &#039;&#039;&#039;b&#039;&#039;&#039;, &#039;&#039;&#039;a≤b&#039;&#039;&#039;. Să se determine, dacă există, un număr prim &#039;&#039;&#039;x&#039;&#039;&#039; care aparţine intervalului închis &#039;&#039;&#039;[a,b]&#039;&#039;&#039; pentru care valoarea expresiei &#039;&#039;&#039;|b+a-2*x|&#039;&#039;&#039; este minimă, unde &#039;&#039;&#039;|m|&#039;&#039;&#039; este valoarea absolută a numărului întreg &#039;&#039;&#039;m&#039;&#039;&#039;. Dacă nu există nici un astfel de număr, se va afişa mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;, iar dacă există mai multe se va afişa cel mai mic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;a&#039;&#039;&#039; şi &#039;&#039;&#039;b&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;x&#039;&#039;&#039; determinat, sau mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ a ≤ b ≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:7 18&lt;br /&gt;
; Ieșire&lt;br /&gt;
:13 &lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
  import math&lt;br /&gt;
&lt;br /&gt;
def este_prim(x):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă un număr x este prim.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return x &amp;gt; 1 and all(x % i != 0 for i in range(2, int(math.sqrt(x))+1))&lt;br /&gt;
&lt;br /&gt;
def validare_date(a, b):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă datele de intrare sunt valide.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not isinstance(a, int) or not isinstance(b, int):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (1 &amp;lt; a &amp;lt;= b &amp;lt;= 1000000000):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    print(&amp;quot;Introduceti intervalul [a, b]:&amp;quot;)&lt;br /&gt;
    a = int(input(&amp;quot;a = &amp;quot;))&lt;br /&gt;
    b = int(input(&amp;quot;b = &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    # validam datele de intrare&lt;br /&gt;
    if validare_date(a, b):&lt;br /&gt;
        min_val = float(&#039;inf&#039;)  # initializam minimul cu o valoare foarte mare&lt;br /&gt;
        min_prim = None  # initializam numarul prim cu None&lt;br /&gt;
&lt;br /&gt;
        # cautam numarul prim x din intervalul [a,b] pentru care expresia este minima&lt;br /&gt;
        for x in range(a, b+1):&lt;br /&gt;
            if este_prim(x):&lt;br /&gt;
                # calculam valoarea expresiei |b+a-2*x|&lt;br /&gt;
                val = abs(b+a-2*x)&lt;br /&gt;
                # actualizam minimul si numarul prim daca este cazul&lt;br /&gt;
                if val &amp;lt; min_val:&lt;br /&gt;
                    min_val = val&lt;br /&gt;
                    min_prim = x&lt;br /&gt;
&lt;br /&gt;
        # afisam rezultatul&lt;br /&gt;
        if min_prim is None:&lt;br /&gt;
            print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(f&amp;quot;Numarul prim din intervalul [{a}, {b}] pentru care expresia este minima este {min_prim}.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricților impuse.&amp;quot;)&lt;br /&gt;
# afisam un mesaj care sa confirme faptul ca datele de intrare sunt valide&lt;br /&gt;
print(f&amp;quot;\nDatele de intrare ({a}, {b}) corespund restricțiilor impuse.\n&amp;quot;) &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;
Acesta este un cod Python care găsește un număr prim într-un interval specificat [a, b], care minimizează o anumită expresie. Se verifică dacă numerele de intrare sunt valide, se caută numărul prim care minimizează expresia și se afișează rezultatul. La final se afișează un mesaj de confirmare a validității datelor de intrare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3302_-_Sum_Inv_Div&amp;diff=5384</id>
		<title>3302 - Sum Inv Div</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3302_-_Sum_Inv_Div&amp;diff=5384"/>
		<updated>2023-04-29T10:50:44Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Pe prima linie a fișierului &amp;#039;&amp;#039;&amp;#039;suminvdiv.in&amp;#039;&amp;#039;&amp;#039; se găsesc cel mult &amp;#039;&amp;#039;&amp;#039;1000&amp;#039;&amp;#039;&amp;#039; de numere naturale distincte mai mici decât &amp;#039;&amp;#039;&amp;#039;10.000.000.000&amp;#039;&amp;#039;&amp;#039;. Scrieți un program care determină pentru fiecare număr citit &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; suma &amp;#039;&amp;#039;&amp;#039;s=1/d1+1/d2+..+1/di , unde d1,d2,….,di&amp;#039;&amp;#039;&amp;#039; sunt divizorii numărului &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039;. Valorile determinate se vor afișa separate printr-un spațiu.  == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;suminvdiv.in&amp;#039;&amp;#039;&amp;#039; conține pe prima linie cel mult &amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;suminvdiv.in&#039;&#039;&#039; se găsesc cel mult &#039;&#039;&#039;1000&#039;&#039;&#039; de numere naturale distincte mai mici decât &#039;&#039;&#039;10.000.000.000&#039;&#039;&#039;. Scrieți un program care determină pentru fiecare număr citit &#039;&#039;&#039;x&#039;&#039;&#039; suma &#039;&#039;&#039;s=1/d1+1/d2+..+1/di&lt;br /&gt;
, unde d1,d2,….,di&#039;&#039;&#039; sunt divizorii numărului &#039;&#039;&#039;x&#039;&#039;&#039;. Valorile determinate se vor afișa separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;suminvdiv.in&#039;&#039;&#039; conține pe prima linie cel mult &#039;&#039;&#039;1000&#039;&#039;&#039; de numere naturale distincte mai mici decât &#039;&#039;&#039;10.000.000.000&#039;&#039;&#039; separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;suminvdiv.out&#039;&#039;&#039; va conține pe prima linie valorile determinate cu exact &#039;&#039;&#039;2&#039;&#039;&#039; zecimale pentru fiecare număr &#039;&#039;&#039;x&#039;&#039;&#039; din fișierul de intrare, valori separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*pe prima linie a fișierului sunt cel mult &#039;&#039;&#039;1000&#039;&#039;&#039; de numere&lt;br /&gt;
*numerele de pe prima linie a fișierului de intrare sunt mai mici decât &#039;&#039;&#039;10.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*rezultatul este considerat corect dacă diferența dintre fiecare valoare afișată și cea corectă este mai mică decât &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; &#039;&#039;&#039;suminvdiv.in&#039;&#039;&#039; &lt;br /&gt;
:12 9 123 78 34 278313 349012 6 24242 900000&lt;br /&gt;
; &#039;&#039;&#039;suminvdiv.out&#039;&#039;&#039;&lt;br /&gt;
:2.33 1.44 1.37 2.15 1.59 1.58 1.75 2.00 1.71 3.55&lt;br /&gt;
== Explicație == &lt;br /&gt;
*Divizorii lui &#039;&#039;&#039;12&#039;&#039;&#039; sunt: &#039;&#039;&#039;1, 2, 3, 4, 6 și 12……s=(11+12+13+14+16+112)=2.33&#039;&#039;&#039;&lt;br /&gt;
*Divizorii lui &#039;&#039;&#039;9&#039;&#039;&#039; sunt: &#039;&#039;&#039;1, 3 și 9……s=(11+13+19)=1.44, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def validare_date(nums):&lt;br /&gt;
    # Verifică dacă numerele sunt mai mici de 10 miliarde&lt;br /&gt;
    for num in nums:&lt;br /&gt;
        if num &amp;gt;= 10000000000:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Verifică dacă fișierul de intrare există&lt;br /&gt;
    if not os.path.isfile(&#039;suminvdiv.in&#039;):&lt;br /&gt;
        print(&amp;quot;Fișierul de intrare nu există&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    # Citeste numerele din fișier&lt;br /&gt;
    with open(&#039;suminvdiv.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        nums = [int(x) for x in f.readline().split()]&lt;br /&gt;
&lt;br /&gt;
    # Validează datele de intrare&lt;br /&gt;
    if validare_date(nums):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        # Parcurge fiecare număr și calculează suma inverselor divizorilor&lt;br /&gt;
        results = []&lt;br /&gt;
        for num in nums:&lt;br /&gt;
            divisors_sum = 0&lt;br /&gt;
            limit = int(math.sqrt(num))&lt;br /&gt;
            for i in range(1, limit+1):&lt;br /&gt;
                if num % i == 0:&lt;br /&gt;
                    divisors_sum += 1/i&lt;br /&gt;
                    if i != num // i:&lt;br /&gt;
                        divisors_sum += 1/(num//i)&lt;br /&gt;
            results.append(divisors_sum)&lt;br /&gt;
&lt;br /&gt;
        # Afișează rezultatele în fișier&lt;br /&gt;
        with open(&#039;suminvdiv.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039; &#039;.join(f&#039;{result:.2f}&#039; for result in results))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
Acest cod rezolvă o problemă care implică citirea unui set de numere dintr-un fișier de intrare, validarea acestora și calcularea sumei inverselor divizorilor pentru fiecare număr. Rezultatele sunt afișate cu două zecimale și scrise într-un fișier de ieșire.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1409_-_Numere_11&amp;diff=5331</id>
		<title>1409 - Numere 11</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1409_-_Numere_11&amp;diff=5331"/>
		<updated>2023-04-29T08:48:16Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Calculați suma obținută prin adunarea celui mai mare divizor prim al fiecărui număr dat. == 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. == Date de ieşire == Programul va afișa pe ecran numărul &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;, reprezentând suma ceruta. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 10000&amp;#039;&amp;#039;&amp;#039; *cele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere citite vor fi mai mari decât &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; și mai mici dec...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Calculați suma obținută prin adunarea celui mai mare divizor prim al fiecărui număr dat.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând suma ceruta.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mari decât &#039;&#039;&#039;1&#039;&#039;&#039; și mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:9&lt;br /&gt;
7 30 2 17 14 10 9 3 13&lt;br /&gt;
; Ieșire&lt;br /&gt;
:62&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;7 + 5 + 2 + 17 + 7 + 5 + 3 + 3 + 13 = 62&#039;&#039;&#039;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def factor_prim_maxim(n):&lt;br /&gt;
    d = 2&lt;br /&gt;
    var = 0&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            p += 1&lt;br /&gt;
            n //= d&lt;br /&gt;
        if p != 0:&lt;br /&gt;
            var = d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            if n &amp;gt; 1:&lt;br /&gt;
                var = n&lt;br /&gt;
            break&lt;br /&gt;
    return var&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if n &amp;lt; 1:&lt;br /&gt;
        print(&amp;quot;Intrare nevalidă! Numărul de numere întregi trebuie să fie pozitiv.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul de numere întregi: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        s = 0&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            tmp = int(input(f&amp;quot;Introduceți numărul întreg {i+1}: &amp;quot;))&lt;br /&gt;
            s += factor_prim_maxim(tmp)&lt;br /&gt;
        print(s)&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;
Acest program primește de la utilizator un număr &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi și calculează suma factorilor primi maximi ai acestor numere. Programul verifică mai întâi dacă &#039;&#039;&#039;n&#039;&#039;&#039; este pozitiv și apoi calculează factorii primi maximi pentru fiecare număr întreg dat prin intermediul unei funcții numite &#039;&#039;&#039;factor_prim_maxim&#039;&#039;&#039;. Rezultatul final este suma totală a factorilor primi maximi.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0443_-_Divizori_Primi&amp;diff=5324</id>
		<title>0443 - Divizori Primi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0443_-_Divizori_Primi&amp;diff=5324"/>
		<updated>2023-04-29T08:36:01Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Calculaţi suma obținută prin adunarea primului divizor prim al fiecărui număr citit. == 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 == Programul afișează pe ecran numărul &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;, reprezentând suma cerută. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039; *cele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere citite vor fi mai mari decât &amp;#039;&amp;#039;&amp;#039;1...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Calculaţi suma obținută prin adunarea primului divizor prim al fiecărui număr citit.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând suma cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mari decât &#039;&#039;&#039;1&#039;&#039;&#039; și mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
15 13 39 49 25&lt;br /&gt;
; Ieșire&lt;br /&gt;
:31&lt;br /&gt;
== Explicație == &lt;br /&gt;
Pentru numerele date, primul divizor prim este, respectiv: &#039;&#039;&#039;3 13 3 7 5&#039;&#039;&#039;, cu suma &#039;&#039;&#039;31&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def prim(n):&lt;br /&gt;
    d = 2&lt;br /&gt;
    p = 0&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            p += 1&lt;br /&gt;
            n //= d&lt;br /&gt;
        if p &amp;gt; 0:&lt;br /&gt;
            return d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
    return n&lt;br /&gt;
&lt;br /&gt;
def validare_date():&lt;br /&gt;
    n = 0&lt;br /&gt;
    while n &amp;lt;= 0:&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(input(&amp;quot;Introduceti n: &amp;quot;))&lt;br /&gt;
            if n &amp;lt;= 0:&lt;br /&gt;
                print(&amp;quot;n trebuie sa fie un numar intreg pozitiv.&amp;quot;)&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;n trebuie sa fie un numar intreg pozitiv.&amp;quot;)&lt;br /&gt;
    return n&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    if validare_date():&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    n = validare_date()&lt;br /&gt;
    s = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        x = 0&lt;br /&gt;
        while x &amp;lt;= 0:&lt;br /&gt;
            try:&lt;br /&gt;
                x = int(input(f&amp;quot;Introduceti x[{i+1}]: &amp;quot;))&lt;br /&gt;
                if x &amp;lt;= 0:&lt;br /&gt;
                    print(&amp;quot;x trebuie sa fie un numar intreg pozitiv.&amp;quot;)&lt;br /&gt;
            except ValueError:&lt;br /&gt;
                print(&amp;quot;x trebuie sa fie un numar intreg pozitiv.&amp;quot;)&lt;br /&gt;
        s += prim(x)&lt;br /&gt;
    print(f&amp;quot;Suma divizorilor primi este: {s}&amp;quot;)&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;
Acest program calculează suma divizorilor primi ai unui set de numere introduse de utilizator. Folosește o funcție pentru a verifica dacă intrarea este validă și o altă funcție pentru a găsi cel mai mic divizor prim al unui număr. Programul calculează suma divizorilor primi pentru fiecare număr introdus de utilizator și le adună pentru a obține o valoare totală, pe care o afișează la final.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0462_-_Div_Prim_Max&amp;diff=4514</id>
		<title>0462 - Div Prim Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0462_-_Div_Prim_Max&amp;diff=4514"/>
		<updated>2023-04-26T12:05:13Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se citesc numere de la tastatură până când se introduc două numere egale. Să se determine numărul citit cu număr maxim de divizori primi. == Date de intrare == Programul citește de la tastatură numere întregi. Citirea se încheie când se introduc două numere egale. == Date de ieşire == Programul afișează pe ecran numerele &amp;#039;&amp;#039;&amp;#039;M NRDIV&amp;#039;&amp;#039;&amp;#039;, separate printr-un spațiu, reprezentând numărul citit cu număr maxim de divizori primi și numărul de div...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citesc numere de la tastatură până când se introduc două numere egale. Să se determine numărul citit cu număr maxim de divizori primi.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numere întregi. Citirea se încheie când se introduc două numere egale.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numerele &#039;&#039;&#039;M NRDIV&#039;&#039;&#039;, separate printr-un spațiu, reprezentând numărul citit cu număr maxim de divizori primi și numărul de divizori primi ai săi.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*numerele citite sunt numere naturale mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dacă există mai multe numere cu număr maxim de divizori primi, se va afişa cel mai mare dintre ele&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:15 30 24 17 84 42 108 20 20&lt;br /&gt;
; Ieșire&lt;br /&gt;
:84 3&lt;br /&gt;
==Explicație==&lt;br /&gt;
Numerele &#039;&#039;&#039;30 84 42&#039;&#039;&#039; au câte &#039;&#039;&#039;3&#039;&#039;&#039; divizori primi, și nu există printre numerele date numere cu mai mulți divizori primi. Dintre acestea, cel mai mare este &#039;&#039;&#039;84&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def nrdiv(x):&lt;br /&gt;
    d = 2&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    while x &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while x % d == 0:&lt;br /&gt;
            p += 1&lt;br /&gt;
            x //= d&lt;br /&gt;
        if p &amp;gt; 0:&lt;br /&gt;
            cnt += 1&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; x:&lt;br /&gt;
            d = x&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
def validare_date(numar):&lt;br /&gt;
    while True:&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(input(f&amp;quot;Introduceți {numar} număr: &amp;quot;))&lt;br /&gt;
            if n &amp;lt;= 0:&lt;br /&gt;
                raise ValueError(&amp;quot;Numărul trebuie să fie pozitiv.&amp;quot;)&lt;br /&gt;
            return n&lt;br /&gt;
        except ValueError as e:&lt;br /&gt;
            print(f&amp;quot;Input invalid: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    a = validare_date(&amp;quot;primul&amp;quot;)&lt;br /&gt;
    nmax = a&lt;br /&gt;
    max_div = nrdiv(a)&lt;br /&gt;
    while True:&lt;br /&gt;
        b = validare_date(&amp;quot;următorul&amp;quot;)&lt;br /&gt;
        if a == b:&lt;br /&gt;
            break&lt;br /&gt;
        div_b = nrdiv(b)&lt;br /&gt;
        if div_b &amp;gt; max_div:&lt;br /&gt;
            max_div = div_b&lt;br /&gt;
            nmax = b&lt;br /&gt;
        elif div_b == max_div and b &amp;gt; nmax:&lt;br /&gt;
            nmax = b&lt;br /&gt;
        a = b&lt;br /&gt;
    print(f&amp;quot;Numărul cu cele mai multe divizori este: {nmax} cu {max_div} divizori.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Pentru a rezolva problema, trebuie să parcurgem secvența dată și să numărăm divizorii fiecărui element. Dacă numărul de divizori al unui element este mai mare decât cel al celorlalte elemente întâlnite până în acel moment, actualizăm numărul maxim de divizori și numărul corespunzător. Dacă numărul de divizori al elementului curent este egal cu numărul maxim de divizori întâlnit până acum, comparam elementul curent cu cel mai mare număr găsit până acum și actualizăm numărul corespunzător dacă este cazul. Pentru a număra divizorii unui număr, parcurgem toate numerele mai mici sau egale cu rădăcina pătrată a numărului respectiv și verificăm dacă sunt divizori sau nu. Pentru a gestiona citirea datelor de intrare, folosim o funcție de validare a datelor care verifică dacă valorile introduse sunt numere întregi pozitive.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3289_-_Max_Prime_Intre_Ele&amp;diff=4483</id>
		<title>3289 - Max Prime Intre Ele</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3289_-_Max_Prime_Intre_Ele&amp;diff=4483"/>
		<updated>2023-04-25T22:07:34Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Indicatorul lui Euler, &amp;#039;&amp;#039;&amp;#039;φ(n)&amp;#039;&amp;#039;&amp;#039; – uneori numită funcția phi, este folosit pentru a determina câte numere mai mici decât &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; sunt relativ prime cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. De exemplu, cum &amp;#039;&amp;#039;&amp;#039;1, 2, 4, 5, 7 și 8&amp;#039;&amp;#039;&amp;#039; sunt toate mai mici decât &amp;#039;&amp;#039;&amp;#039;9&amp;#039;&amp;#039;&amp;#039; și relativ prime la &amp;#039;&amp;#039;&amp;#039;9, φ(9)=6&amp;#039;&amp;#039;&amp;#039;.  n	Relativ prime	φ(n)	n/φ(n) 2	1	1	2 3	1,2	2	1.5 4	1,3	2	2 5	1,2,3,4	4	1.25 6	1,5	2	3 7	1,2,3,4,5,6	6	1.1666…. 8	1,3,5,7	4	2 9	1,2,4,5,7,8	6	1.5 10	1,3,7,9	4	2.5 Se poate vedea...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Indicatorul lui Euler, &#039;&#039;&#039;φ(n)&#039;&#039;&#039; – uneori numită funcția phi, este folosit pentru a determina câte numere mai mici decât &#039;&#039;&#039;n&#039;&#039;&#039; sunt relativ prime cu &#039;&#039;&#039;n&#039;&#039;&#039;. De exemplu, cum &#039;&#039;&#039;1, 2, 4, 5, 7 și 8&#039;&#039;&#039; sunt toate mai mici decât &#039;&#039;&#039;9&#039;&#039;&#039; și relativ prime la &#039;&#039;&#039;9, φ(9)=6&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
n	Relativ prime	φ(n)	n/φ(n)&lt;br /&gt;
2	1	1	2&lt;br /&gt;
3	1,2	2	1.5&lt;br /&gt;
4	1,3	2	2&lt;br /&gt;
5	1,2,3,4	4	1.25&lt;br /&gt;
6	1,5	2	3&lt;br /&gt;
7	1,2,3,4,5,6	6	1.1666….&lt;br /&gt;
8	1,3,5,7	4	2&lt;br /&gt;
9	1,2,4,5,7,8	6	1.5&lt;br /&gt;
10	1,3,7,9	4	2.5&lt;br /&gt;
Se poate vedea că &#039;&#039;&#039;n=6&#039;&#039;&#039; produce valoarea maximă &#039;&#039;&#039;n/φ(n)&#039;&#039;&#039; pentru &#039;&#039;&#039;n ≤ 10&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Se consideră un șir de numere naturale mai mari decât &#039;&#039;&#039;1&#039;&#039;&#039;, numere formate din cel mult &#039;&#039;&#039;9&#039;&#039;&#039; cifre. Să se scrie un program care determină dintre acestea numărul &#039;&#039;&#039;n&#039;&#039;&#039; pentru care raportul &#039;&#039;&#039;n/φ(n)&#039;&#039;&#039; are valoare maximă. În cazul în care sunt mai multe valori pentru care raportul &#039;&#039;&#039;n/φ(n)&#039;&#039;&#039; este maxim se va afișa prima dintre ele.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;maxprimeintreele.in&#039;&#039;&#039; conține pe prima linie cel mult &#039;&#039;&#039;10000&#039;&#039;&#039; numere naturale din intervalul &#039;&#039;&#039;[2,999999999]&#039;&#039;&#039; separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;maxprimeintreele.out&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;k&#039;&#039;&#039;, reprezentând numărul &#039;&#039;&#039;n&#039;&#039;&#039; pentru care raportul &#039;&#039;&#039;n/φ(n)&#039;&#039;&#039; are valoare maximă.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*numerele din fișierul de intrare sunt din intervalul &#039;&#039;&#039;[2, 999999999]&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; &#039;&#039;&#039;maxprimeintreele.in&#039;&#039;&#039;&lt;br /&gt;
:2 3 4 5 6 7 8 9 10&lt;br /&gt;
; &#039;&#039;&#039;maxprimeintreele.out&#039;&#039;&#039;&lt;br /&gt;
:6&lt;br /&gt;
==Explicație==&lt;br /&gt;
Dintre numerele aflate în fișierul de intrare, numărul &#039;&#039;&#039;6&#039;&#039;&#039; are raportul &#039;&#039;&#039;n/φ(n)&#039;&#039;&#039; cu valoare maximă și anume &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def totient(nr):&lt;br /&gt;
    rank = nr&lt;br /&gt;
    if nr == 1:&lt;br /&gt;
        return 0&lt;br /&gt;
    if nr % 2 == 0:&lt;br /&gt;
        rank -= rank // 2&lt;br /&gt;
        while nr % 2 == 0:&lt;br /&gt;
            nr //= 2&lt;br /&gt;
    i = 3&lt;br /&gt;
    while i * i &amp;lt;= nr:&lt;br /&gt;
        if nr % i == 0:&lt;br /&gt;
            rank -= rank // i&lt;br /&gt;
            while nr % i == 0:&lt;br /&gt;
                nr //= i&lt;br /&gt;
        i += 2&lt;br /&gt;
    if nr &amp;gt; 1:&lt;br /&gt;
        rank -= rank // nr&lt;br /&gt;
    return rank&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_date(valoare):&lt;br /&gt;
    try:&lt;br /&gt;
        valoare_int = int(valoare)&lt;br /&gt;
        if valoare_int &amp;gt; 0:&lt;br /&gt;
            return valoare_int&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Numărul trebuie să fie pozitiv.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Intrare invalidă. Vă rugăm să introduceți un număr întreg.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    print(&amp;quot;Introduceți numere întregi pozitive. Pentru a opri introducerea de numere, introduceți orice altă valoare.&amp;quot;)&lt;br /&gt;
    valoare_max = 0&lt;br /&gt;
    nr_max = 6&lt;br /&gt;
    while True:&lt;br /&gt;
        valoare = input()&lt;br /&gt;
        if valoare_max and not valoare:&lt;br /&gt;
            break&lt;br /&gt;
        valoare_int = validare_date(valoare)&lt;br /&gt;
        if not valoare_int:&lt;br /&gt;
            continue&lt;br /&gt;
        if valoare_int / totient(valoare_int) &amp;gt; valoare_max:&lt;br /&gt;
            valoare_max = valoare_int / totient(valoare_int)&lt;br /&gt;
            nr_max = valoare_int&lt;br /&gt;
&lt;br /&gt;
    if nr_max:&lt;br /&gt;
        print(f&amp;quot;Numărul cu valoarea maximă a x/totient(x) este {nr_max}.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu ați introdus niciun număr valid.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Programul este o implementare a funcției &#039;&#039;&#039;Euler Totient&#039;&#039;&#039;, care calculează numărul de numere întregi pozitive mai mici decât un anumit număr și care sunt prime relativ cu acel număr. Programul primește date de intrare de la utilizator, validează datele și calculează valoarea &#039;&#039;&#039;x/totient(x)&#039;&#039;&#039; pentru fiecare valoare introdusă. Programul afișează valoarea maximă a &#039;&#039;&#039;x/totient(x)&#039;&#039;&#039; și indică dacă datele de intrare introduse de utilizator au fost valide sau nu.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1780_-_Fractie&amp;diff=4482</id>
		<title>1780 - Fractie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1780_-_Fractie&amp;diff=4482"/>
		<updated>2023-04-25T21:22:07Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau două numere naturale &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; fiind prim. Să se afle cel mai mare număr natural &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039;, astfel încât numărul &amp;#039;&amp;#039;&amp;#039;n!/mx&amp;#039;&amp;#039;&amp;#039;să fie natural. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; si &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;. == Date de ieşire == Programul va afișa pe ecran numarul &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039;. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;2 ≤ m ≤ n ≤ 10000&amp;#039;&amp;#039;&amp;#039; *&amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; este prim. == Exemplu == ; Intrare :5 5 ; Ieșire :1 ==Explicație...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;, &#039;&#039;&#039;m&#039;&#039;&#039; fiind prim. Să se afle cel mai mare număr natural &#039;&#039;&#039;x&#039;&#039;&#039;, astfel încât numărul &#039;&#039;&#039;n!/mx&#039;&#039;&#039;să fie natural.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; si &#039;&#039;&#039;m&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numarul &#039;&#039;&#039;x&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;2 ≤ m ≤ n ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;m&#039;&#039;&#039; este prim.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
:1&lt;br /&gt;
==Explicație==&lt;br /&gt;
&#039;&#039;&#039;5! = 120. 60 = 5 * 2 * 2 * 2 * 3&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n, m):&lt;br /&gt;
    # Verifică dacă n și m sunt numere întregi pozitive&lt;br /&gt;
    if isinstance(n, int) and isinstance(m, int) and n &amp;gt; 0 and m &amp;gt; 0:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citește datele de intrare de la utilizator&lt;br /&gt;
    n, m = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    # Validează datele de intrare&lt;br /&gt;
    if validare_date(n, m):&lt;br /&gt;
        # Efectuează aceeași calculație ca în codul original&lt;br /&gt;
        p = 0&lt;br /&gt;
        for i in range(1, n+1):&lt;br /&gt;
            aux = i&lt;br /&gt;
            if aux % m == 0:&lt;br /&gt;
                while aux % m == 0:&lt;br /&gt;
                    p += 1&lt;br /&gt;
                    aux = aux // m&lt;br /&gt;
        print(p)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2306_-_Numere_22&amp;diff=4481</id>
		<title>2306 - Numere 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2306_-_Numere_22&amp;diff=4481"/>
		<updated>2023-04-25T21:09:29Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau două numere prime &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;q&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale nenule. Determinați exponentul maxim &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; pentru care numărul &amp;#039;&amp;#039;&amp;#039;pE⋅qE&amp;#039;&amp;#039;&amp;#039; divide produsul celor &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere date. == Date de intrare == Programul citește de la tastatură numere &amp;#039;&amp;#039;&amp;#039;p q 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 == Programul afișează pe ecran numărul &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul cerut. == Restricții și precizări == *&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere prime &#039;&#039;&#039;p&#039;&#039;&#039;, &#039;&#039;&#039;q&#039;&#039;&#039; și &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Determinați exponentul maxim &#039;&#039;&#039;E&#039;&#039;&#039; pentru care numărul &#039;&#039;&#039;pE⋅qE&#039;&#039;&#039; divide produsul celor &#039;&#039;&#039;n&#039;&#039;&#039; numere date.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numere &#039;&#039;&#039;p q n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;E&#039;&#039;&#039;, reprezentând numărul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:7 2 5&lt;br /&gt;
72 56 70 9 700&lt;br /&gt;
; Ieșire&lt;br /&gt;
:3&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validare_date(p, q, n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă valorile de intrare sunt valide, bazate pe anumite restricții.&lt;br /&gt;
    Returnează True dacă sunt valide, False altfel.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not (2 &amp;lt;= p &amp;lt;= 10**9):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= q &amp;lt;= 10**9):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10**5):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def calculeaza_puteri(p, q, n, nums):&lt;br /&gt;
    p1 = p2 = 0&lt;br /&gt;
    for tmp in nums:&lt;br /&gt;
        d = 2&lt;br /&gt;
        while d * d &amp;lt;= tmp:&lt;br /&gt;
            p = 0&lt;br /&gt;
            while tmp % d == 0:&lt;br /&gt;
                tmp //= d&lt;br /&gt;
                p += 1&lt;br /&gt;
            if d == p:&lt;br /&gt;
                p1 += p&lt;br /&gt;
            if d == q:&lt;br /&gt;
                p2 += p&lt;br /&gt;
            d += 1&lt;br /&gt;
        if tmp &amp;gt; 1:&lt;br /&gt;
            if tmp == p:&lt;br /&gt;
                p1 += 1&lt;br /&gt;
            elif tmp == q:&lt;br /&gt;
                p2 += 1&lt;br /&gt;
    return min(p1, p2)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # citeste valorile de intrare&lt;br /&gt;
    p, q, n = map(int, input().split())&lt;br /&gt;
    nums = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    # valideaza valorile de intrare&lt;br /&gt;
    if validare_date(p, q, n):&lt;br /&gt;
        # calculeaza puterile si afiseaza rezultatul&lt;br /&gt;
        result = calculeaza_puteri(p, q, n, nums)&lt;br /&gt;
        print(result)&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Soluția calculează numărul minim de numere dintr-o listă care au ca factori primi doar numerele a și b date. Algoritmul descompune fiecare număr în factori primi, numără factorii primi egali cu &#039;&#039;&#039;p și q&#039;&#039;&#039; și returnează minimul dintre cele două valori. În plus, soluția include o funcție de validare a datelor de intrare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3360_-_Pereche_2&amp;diff=4423</id>
		<title>3360 - Pereche 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3360_-_Pereche_2&amp;diff=4423"/>
		<updated>2023-04-25T12:05:34Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dă un șir de &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Determinați o pereche de numere consecutive în șir, cu proprietatea că au același număr de factori primi. Dacă sunt mai multe asemenea perechi se va determina aceea cu suma numerelor mai mică. Dacă în continuare sunt mai multe perechi, se va determina prima din șir. == 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 == Date de ieşire == Programul va...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați o pereche de numere consecutive în șir, cu proprietatea că au același număr de factori primi. Dacă sunt mai multe asemenea perechi se va determina aceea cu suma numerelor mai mică. Dacă în continuare sunt mai multe perechi, se va determina prima din șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran două numere &#039;&#039;&#039;a b&#039;&#039;&#039;, separate prin câte un spațiu, reprezentând perechea determinată. Ordinea numerelor &#039;&#039;&#039;a b&#039;&#039;&#039; este cea din șir.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*numerele din șir vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*dacă nu există nicio pereche care respectă cerința se va afișa &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
40 63 64 27 100&lt;br /&gt;
; Ieșire&lt;br /&gt;
:64 27&lt;br /&gt;
==Explicație==&lt;br /&gt;
Perechea &#039;&#039;&#039;40 63&#039;&#039;&#039; respectă regula, dar are suma mai mare (&#039;&#039;&#039;40+63 &amp;gt; 64 + 27&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def desc(n):&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    d = 2&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            p += 1&lt;br /&gt;
            n //= d&lt;br /&gt;
        if p:&lt;br /&gt;
            cnt += 1&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
def ok(a, b):&lt;br /&gt;
    return desc(a) == desc(b)&lt;br /&gt;
&lt;br /&gt;
def validare_date():&lt;br /&gt;
    while True:&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(input(&amp;quot;Introduceti numarul de elemente din sir: &amp;quot;))&lt;br /&gt;
            if n &amp;lt; 2:&lt;br /&gt;
                print(&amp;quot;Sirul trebuie sa aiba cel putin 2 elemente.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                break&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Numarul de elemente trebuie sa fie un numar intreg.&amp;quot;)&lt;br /&gt;
    a = None&lt;br /&gt;
    while a is None:&lt;br /&gt;
        try:&lt;br /&gt;
            a = int(input(&amp;quot;Introduceti primul element: &amp;quot;))&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Elementul trebuie sa fie un numar intreg.&amp;quot;)&lt;br /&gt;
    return n, a&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n, a = validare_date()&lt;br /&gt;
    rez1 = 1000000000&lt;br /&gt;
    rez2 = 1000000000&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, n+1):&lt;br /&gt;
        b = None&lt;br /&gt;
        while b is None:&lt;br /&gt;
            try:&lt;br /&gt;
                b = int(input(f&amp;quot;Introduceti al {i}-lea element: &amp;quot;))&lt;br /&gt;
            except ValueError:&lt;br /&gt;
                print(&amp;quot;Elementul trebuie sa fie un numar intreg.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if ok(a, b) and a + b &amp;lt; rez1 + rez2:&lt;br /&gt;
            rez1 = a&lt;br /&gt;
            rez2 = b&lt;br /&gt;
        a = b&lt;br /&gt;
&lt;br /&gt;
    if rez1 != 1000000000:&lt;br /&gt;
        print(f&amp;quot;Numerele cautate sunt {rez1} si {rez2}.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Scopul programului este să găsească două numere consecutive dintr-un șir dat, astfel încât cele două numere să aibă același număr de factori primi, iar suma lor să fie cea mai mică posibilă.&lt;br /&gt;
&lt;br /&gt;
Programul începe prin citirea numărului de elemente din șir și a primului element din șir. Datele de intrare sunt verificate și validate pentru a se asigura că sunt corecte.&lt;br /&gt;
&lt;br /&gt;
Următorul pas este să căutăm perechile de numere consecutive cu același număr de factori primi. Pentru aceasta, vom itera prin șir, începând cu al doilea element, și vom verifica fiecare pereche de numere consecutive. Pentru a verifica dacă două numere au același număr de factori primi, putem folosi funcția &#039;&#039;&#039;desc()&#039;&#039;&#039;, care primește un număr și returnează numărul de factori primi ai săi. Apoi, vom compara suma celor două numere cu cele mai mici sume găsite până acum și vom actualiza cele două numere de rezultat, &#039;&#039;&#039;rez1 și rez2&#039;&#039;&#039;, dacă găsim o pereche cu o sumă mai mică.&lt;br /&gt;
&lt;br /&gt;
La sfârșitul programului, dacă am găsit o pereche validă de numere, vom afișa cele două numere. În caz contrar, vom afișa &amp;quot;NU EXISTA&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
În plus față de acest proces de găsire a perechilor, programul a fost modificat și pentru a include o funcție de validare a datelor de intrare pentru a verifica dacă numărul de elemente din șir și primul element din șir sunt introduse corect. Astfel, se evită erorile de execuție cauzate de datele de intrare incorecte.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3359_-_Pereche_1&amp;diff=4396</id>
		<title>3359 - Pereche 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3359_-_Pereche_1&amp;diff=4396"/>
		<updated>2023-04-25T11:28:05Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dă un șir de &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Determinați o pereche de numere consecutive în șir, cu proprietatea că au exact aceiași factori primi, indiferent de exponent. Dacă sunt mai multe asemenea perechi se va determina aceea cu suma numerelor mai mare. Dacă în continuare sunt mai multe perechi, se va determina prima din șir. == 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. == Date de ieş...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați o pereche de numere consecutive în șir, cu proprietatea că au exact aceiași factori primi, indiferent de exponent. Dacă sunt mai multe asemenea perechi se va determina aceea cu suma numerelor mai mare. Dacă în continuare sunt mai multe perechi, se va determina prima din șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran două numere &#039;&#039;&#039;a b&#039;&#039;&#039;, separate prin câte un spațiu, reprezentând perechea determinată. Numerele &#039;&#039;&#039;a b&#039;&#039;&#039; vor fi afișate în ordinea din șir.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*numerele din șir vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*dacă nu există nicio pereche care respectă cerința se va afișa &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
45 75 80 100 45&lt;br /&gt;
; Ieșire&lt;br /&gt;
:80 100&lt;br /&gt;
==Explicație==&lt;br /&gt;
Perechea &#039;&#039;&#039;45 75&#039;&#039;&#039; respectă și ea regula, dar are suma mai mică &#039;&#039;&#039;(45 + 75 &amp;lt; 80 + 100)&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def ok(a, b):&lt;br /&gt;
    d = 2&lt;br /&gt;
    while a &amp;gt; 1:&lt;br /&gt;
        if a % d == 0:&lt;br /&gt;
            if b % d != 0:&lt;br /&gt;
                return False&lt;br /&gt;
            else:&lt;br /&gt;
                while a % d == 0:&lt;br /&gt;
                    a //= d&lt;br /&gt;
                while b % d == 0:&lt;br /&gt;
                    b //= d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; a:&lt;br /&gt;
            d = a&lt;br /&gt;
    return a == b&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceti n: &amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(n)&lt;br /&gt;
        if n &amp;lt; 2 or n &amp;gt; 1000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta restrictiile impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        a = input(&amp;quot;Introduceti elementele array-ului: &amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            a = list(map(int, a.split()))&lt;br /&gt;
            if len(a) != n:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
            for x in a:&lt;br /&gt;
                if x &amp;lt; 1 or x &amp;gt; 10**6:&lt;br /&gt;
                    raise ValueError&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta restrictiile impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            rez1 = -1&lt;br /&gt;
            rez2 = -1&lt;br /&gt;
            for i in range(1, n):&lt;br /&gt;
                if ok(a[i-1], a[i]) and rez1 + rez2 &amp;lt; a[i-1] + a[i]:&lt;br /&gt;
                    rez1 = a[i-1]&lt;br /&gt;
                    rez2 = a[i]&lt;br /&gt;
            if rez1 != -1:&lt;br /&gt;
                print(rez1, rez2)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
            print(&amp;quot;\nDatele de intrare respecta restrictiile impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest program caută o pereche de numere prime între ele dintr-un array dat și afișează cele două numere cu suma lor maximă. Programul folosește o metodă de factorizare pentru a verifica dacă două numere sunt prime între ele sau nu. Dacă nu există o astfel de pereche de numere în array, se afișează &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;. Programul include și o funcție de validare a datelor de intrare și afișează un mesaj corespunzător în funcție de rezultatul verificării.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3355_-_Factori_4&amp;diff=4380</id>
		<title>3355 - Factori 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3355_-_Factori_4&amp;diff=4380"/>
		<updated>2023-04-25T11:07:10Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Determinați cel mai mic număr care are un singur factor prim. Dacă nu există niciun număr cu un singur factor prim se va afișa mesajul &amp;#039;&amp;#039;&amp;#039;NU EXISTA&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. == Date de ieşire == Programul va afișa pe ecran numărul cerut. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039; *cele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere citite vor fi mai mi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați cel mai mic număr care are un singur factor prim. Dacă nu există niciun număr cu un singur factor prim se va afișa mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
12 9 16 4 20&lt;br /&gt;
; Ieșire&lt;br /&gt;
:4&lt;br /&gt;
==Explicație==&lt;br /&gt;
Dintre numere citite au un factor prim numerele &#039;&#039;&#039;9 16 4&#039;&#039;&#039;. Dintre acestea cel mai mic este &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, arr):&lt;br /&gt;
    if not isinstance(n, int) or n &amp;lt;= 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if not isinstance(arr, list) or len(arr) != n or not all(isinstance(x, int) for x in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def ok(n):&lt;br /&gt;
    d, cnt = 2, 0&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            n //= d&lt;br /&gt;
            p += 1&lt;br /&gt;
        if p:&lt;br /&gt;
            cnt += 1&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
    return cnt == 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de elemente din lista: &amp;quot;))&lt;br /&gt;
    arr = list(map(int, input(&amp;quot;Introduceti lista de numere: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n, arr):&lt;br /&gt;
        mini = math.inf&lt;br /&gt;
        for x in arr:&lt;br /&gt;
            if ok(x) and x &amp;lt; mini:&lt;br /&gt;
                mini = x&lt;br /&gt;
        if mini &amp;lt; math.inf:&lt;br /&gt;
            print(&amp;quot;Cel mai mic număr prim putere din listă este:&amp;quot;, mini)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Nu există niciun număr prim putere în listă.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod primește o listă de numere întregi și găsește cel mai mic număr din listă care este un număr prim putere.&lt;br /&gt;
&lt;br /&gt;
Pentru a verifica dacă un număr este un număr prim putere, se calculează factorii primi ai numărului și se numără câți factori primi diferiți are. Dacă numărul de factori primi diferiți este 1, atunci numărul este o putere a unui număr prim.&lt;br /&gt;
&lt;br /&gt;
Codul începe prin a citi numărul de elemente din listă și lista însăși, utilizând funcția &#039;&#039;&#039;input() și list()&#039;&#039;&#039;. Apoi, se validează datele de intrare cu funcția &#039;&#039;&#039;validare_date()&#039;&#039;&#039;, care verifică că n este un număr întreg pozitiv și că lista conține n numere întregi.&lt;br /&gt;
&lt;br /&gt;
După validarea datelor de intrare, se inițializează variabila &#039;&#039;&#039;mini&#039;&#039;&#039; cu o valoare foarte mare. Se parcurge lista cu un &#039;&#039;&#039;for loop&#039;&#039;&#039;, și pentru fiecare element se verifică dacă este un număr prim putere cu ajutorul funcției &#039;&#039;&#039;ok()&#039;&#039;&#039;. Dacă numărul este un număr prim putere și este mai mic decât valoarea actuală a lui &#039;&#039;&#039;mini&#039;&#039;&#039;, atunci acesta devine noul mini.&lt;br /&gt;
&lt;br /&gt;
La final, se verifică dacă &#039;&#039;&#039;mini&#039;&#039;&#039; a fost actualizat. Dacă da, atunci se afișează cel mai mic număr prim putere din listă, altfel se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3354_-_Factori_3&amp;diff=4342</id>
		<title>3354 - Factori 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3354_-_Factori_3&amp;diff=4342"/>
		<updated>2023-04-25T10:47:06Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Determinați cel mai mare număr care are un singur factor prim. Dacă nu există niciun număr cu un singur factor prim se va afișa mesajul &amp;#039;&amp;#039;&amp;#039;NU EXISTA&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. == Date de ieşire == Programul va afișa pe ecran numărul cerut. == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039; *cele n numere citite vor fi mai mici de...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați cel mai mare număr care are un singur factor prim. Dacă nu există niciun număr cu un singur factor prim se va afișa mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele n numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
12 9 16 4 20&lt;br /&gt;
; Ieșire&lt;br /&gt;
:16&lt;br /&gt;
==Explicație==&lt;br /&gt;
Dintre numere citite au un factor prim numerele &#039;&#039;&#039;9 16 4&#039;&#039;&#039;. Dintre acestea cel mai mare este &#039;&#039;&#039;16&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def prm(n):&lt;br /&gt;
    d = 2&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        if n % d == 0:&lt;br /&gt;
            cnt += 1&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            n //= d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
def validare_date(input_str):&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input_str)&lt;br /&gt;
        if n &amp;lt;= 0:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        return n&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    input_str = input(&amp;quot;Introduceti numarul de date de intrare: &amp;quot;)&lt;br /&gt;
    n = validare_date(input_str)&lt;br /&gt;
&lt;br /&gt;
    nums = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        x = input(&amp;quot;Introduceti numarul {}: &amp;quot;.format(i + 1))&lt;br /&gt;
        nums.append(int(x))&lt;br /&gt;
&lt;br /&gt;
    maxi = 0&lt;br /&gt;
    for x in nums:&lt;br /&gt;
        if prm(x) == 1 and x &amp;gt; maxi:&lt;br /&gt;
            maxi = x&lt;br /&gt;
&lt;br /&gt;
    if maxi != 0:&lt;br /&gt;
        print(&amp;quot;Numarul maxim care indeplineste conditia este:&amp;quot;, maxi)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest program are ca scop găsirea celui mai mare număr dintr-un set de numere introduse de utilizator care are exact doi divizori (numere prime).&lt;br /&gt;
&lt;br /&gt;
Pentru a face acest lucru, programul folosește două funcții. Funcția &#039;&#039;&#039;prm(n)&#039;&#039;&#039; calculează numărul de divizori ai unui număr întreg pozitiv n. Funcția &#039;&#039;&#039;validare_date(input_str)&#039;&#039;&#039; verifică dacă datele de intrare introduse de utilizator sunt corecte.&lt;br /&gt;
&lt;br /&gt;
În funcția principală a programului, întâi se solicită numărul de date de intrare și se verifică utilizând funcția &#039;&#039;&#039;validare_date(input_str)&#039;&#039;&#039;. Apoi se solicită introducerea fiecărui număr în parte și se stochează într-o listă.&lt;br /&gt;
&lt;br /&gt;
În final, programul iterează prin lista de numere, determină numărul de divizori ai fiecărui număr și dacă acesta are exact doi divizori și este mai mare decât numerele anterioare verificate, îl atribuie variabilei maxi. Dacă niciun număr din listă nu îndeplinește condiția, se afișează &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0435_-_Factori_Primi&amp;diff=4319</id>
		<title>0435 - Factori Primi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0435_-_Factori_Primi&amp;diff=4319"/>
		<updated>2023-04-25T10:11:38Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale nenule. Să se verifice dacă cele două numere au exact aceiași factor primi, indiferent de puterea acestora.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran mesajul &#039;&#039;&#039;DA&#039;&#039;&#039;, dacă cele două numere au exact aceiași factori primi, respectiv &#039;&#039;&#039;NU&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*cele două numere citite vor fi mai mici decât 2*30&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:72 48&lt;br /&gt;
; Ieșire&lt;br /&gt;
:DA&lt;br /&gt;
==Explicație==&lt;br /&gt;
&#039;&#039;&#039;72&#039;&#039;&#039; și &#039;&#039;&#039;48&#039;&#039;&#039; au exact aceiași factori primi: &#039;&#039;&#039;2 3&#039;&#039;&#039;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
; Intrare&lt;br /&gt;
:72 30&lt;br /&gt;
; Ieșire&lt;br /&gt;
:NU&lt;br /&gt;
==Explicație==&lt;br /&gt;
Factorii primi ai lui &#039;&#039;&#039;72&#039;&#039;&#039; sunt &#039;&#039;&#039;2 3&#039;&#039;&#039;, iar factorii primi ai lui &#039;&#039;&#039;30&#039;&#039;&#039; sunt &#039;&#039;&#039;2 3 5&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n, m):&lt;br /&gt;
    if n &amp;lt;= 0 or m &amp;lt;= 0:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți primul număr: &amp;quot;))&lt;br /&gt;
    m = int(input(&amp;quot;Introduceți al doilea număr: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n, m):&lt;br /&gt;
        aceiasi_factori = True&lt;br /&gt;
        d = 2&lt;br /&gt;
        while n &amp;gt; 1:&lt;br /&gt;
            if n % d == 0:&lt;br /&gt;
                if m % d != 0:&lt;br /&gt;
                    aceiasi_factori = False&lt;br /&gt;
                while n % d == 0:&lt;br /&gt;
                    n /= d&lt;br /&gt;
                while m % d == 0:&lt;br /&gt;
                    m /= d&lt;br /&gt;
            d += 1&lt;br /&gt;
            if d * d &amp;gt; n:&lt;br /&gt;
                d = n&lt;br /&gt;
        if aceiasi_factori and m == 1:&lt;br /&gt;
            print(&amp;quot;DA&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
În această problemă se cere verificarea dacă două numere naturale au aceiași factori primi. Codul primește cele două numere de la tastatură, apoi verifică dacă datele de intrare sunt valide (ambele numere trebuie să fie pozitive). Dacă datele sunt valide, codul caută factorii primi ai primului număr și verifică dacă aceiași factori apar și în al doilea număr. Dacă toți factorii primi ai primului număr apar și în al doilea număr, iar al doilea număr nu are alți factori primi, atunci cele două numere au aceiași factori primi. La sfârșit, codul afișează dacă cele două numere au aceiași factori primi sau nu.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0463_-_Factor&amp;diff=4316</id>
		<title>0463 - Factor</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0463_-_Factor&amp;diff=4316"/>
		<updated>2023-04-25T10:08:39Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale nenule. Determinați cel mai mare număr prim care apare în descompunerea în factori a produsului celor &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere, precum și exponentul său în descompunere. == 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 == Programul afișează pe ecran numerele &amp;#039;&amp;#039;&amp;#039;P E&amp;#039;&amp;#039;&amp;#039;, separate printr-un spațiu, reprezentând numărul prim căuta...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Determinați cel mai mare număr prim care apare în descompunerea în factori a produsului celor &#039;&#039;&#039;n&#039;&#039;&#039; numere, precum și exponentul său în descompunere.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numerele &#039;&#039;&#039;P E&#039;&#039;&#039;, separate printr-un spațiu, reprezentând numărul prim căutat și exponentul său.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*pentru toate datele de test va exista cel puțin un număr dintre cele &#039;&#039;&#039;n&#039;&#039;&#039; care are factori primi&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
72 56 70 9 100&lt;br /&gt;
; Ieșire&lt;br /&gt;
:7 2&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n, arr):&lt;br /&gt;
    if not isinstance(n, int) or n &amp;lt;= 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    for x in arr:&lt;br /&gt;
        if not isinstance(x, int) or x &amp;lt;= 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul de elemente: &amp;quot;))&lt;br /&gt;
    arr = [int(x) for x in input(&amp;quot;Introduceți elementele separate prin spațiu: &amp;quot;).split()]&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n, arr):&lt;br /&gt;
        dmax, pmax = 0, 0&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            x = arr[i]&lt;br /&gt;
            d, p = 2, 0&lt;br /&gt;
            while x &amp;gt; 1:&lt;br /&gt;
                p = 0&lt;br /&gt;
                while x % d == 0:&lt;br /&gt;
                    x //= d&lt;br /&gt;
                    p += 1&lt;br /&gt;
                if p:&lt;br /&gt;
                    if d &amp;gt; dmax:&lt;br /&gt;
                        dmax, pmax = d, p&lt;br /&gt;
                    elif d == dmax:&lt;br /&gt;
                        pmax += p&lt;br /&gt;
                d += 1&lt;br /&gt;
                if d * d &amp;gt; x:&lt;br /&gt;
                    d = x&lt;br /&gt;
        print(&amp;quot;Numărul prim căutat și exponentul său sunt: &amp;quot;, dmax, pmax)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explcație rezolvare==&lt;br /&gt;
Acest program primește o listă de numere și găsește cel mai mare factor prim al fiecărui număr și exponentul său. Înainte de procesul de descompunere, programul verifică dacă datele de intrare corespund restricțiilor impuse. Dacă datele de intrare nu corespund, programul va afișa un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0435_-_Factori_Primi&amp;diff=4302</id>
		<title>0435 - Factori Primi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0435_-_Factori_Primi&amp;diff=4302"/>
		<updated>2023-04-25T09:52:17Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: Pagină nouă: == Cerinţa == Se dau două numere naturale nenule. Să se verifice dacă cele două numere au exact aceiași factor primi, indiferent de puterea acestora. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;. == Date de ieşire == Programul afișează pe ecran mesajul &amp;#039;&amp;#039;&amp;#039;DA&amp;#039;&amp;#039;&amp;#039;, dacă cele două numere au exact aceiași factori primi, respectiv &amp;#039;&amp;#039;&amp;#039;NU&amp;#039;&amp;#039;&amp;#039; în caz contrar. == Restricții și precizări == *cele două numere citite vor fi mai mic...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale nenule. Să se verifice dacă cele două numere au exact aceiași factor primi, indiferent de puterea acestora.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran mesajul &#039;&#039;&#039;DA&#039;&#039;&#039;, dacă cele două numere au exact aceiași factori primi, respectiv &#039;&#039;&#039;NU&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*cele două numere citite vor fi mai mici decât 2*30&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:72 48&lt;br /&gt;
; Ieșire&lt;br /&gt;
:DA&lt;br /&gt;
==Explicație==&lt;br /&gt;
&#039;&#039;&#039;72&#039;&#039;&#039; și &#039;&#039;&#039;48&#039;&#039;&#039; au exact aceiași factori primi: &#039;&#039;&#039;2 3&#039;&#039;&#039;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
; Intrare&lt;br /&gt;
:72 30&lt;br /&gt;
; Ieșire&lt;br /&gt;
:NU&lt;br /&gt;
==Explicație==&lt;br /&gt;
Factorii primi ai lui &#039;&#039;&#039;72&#039;&#039;&#039; sunt &#039;&#039;&#039;2 3&#039;&#039;&#039;, iar factorii primi ai lui &#039;&#039;&#039;30&#039;&#039;&#039; sunt &#039;&#039;&#039;2 3 5&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n, m):&lt;br /&gt;
    if n &amp;lt;= 0 or m &amp;lt;= 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n, m = map(int, input().split())&lt;br /&gt;
    if validare_date(n, m):&lt;br /&gt;
        aceiasi_factori = True&lt;br /&gt;
        d = 2&lt;br /&gt;
        while n &amp;gt; 1:&lt;br /&gt;
            p = 0&lt;br /&gt;
            if n % d == 0:&lt;br /&gt;
                if m % d != 0:&lt;br /&gt;
                    aceiasi_factori = False&lt;br /&gt;
                while n % d == 0:&lt;br /&gt;
                    n //= d&lt;br /&gt;
                while m % d == 0:&lt;br /&gt;
                    m //= d&lt;br /&gt;
            d += 1&lt;br /&gt;
            if d * d &amp;gt; n:&lt;br /&gt;
                d = n&lt;br /&gt;
        if aceiasi_factori and m == 1:&lt;br /&gt;
            print(&amp;quot;DA&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
În această problemă se cere verificarea dacă două numere naturale au aceiași factori primi. Codul primește cele două numere de la tastatură, apoi verifică dacă datele de intrare sunt valide (ambele numere trebuie să fie pozitive). Dacă datele sunt valide, codul caută factorii primi ai primului număr și verifică dacă aceiași factori apar și în al doilea număr. Dacă toți factorii primi ai primului număr apar și în al doilea număr, iar al doilea număr nu are alți factori primi, atunci cele două numere au aceiași factori primi. La sfârșit, codul afișează dacă cele două numere au aceiași factori primi sau nu.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2821_-_Factori_Primi_1&amp;diff=3447</id>
		<title>2821 - Factori Primi 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2821_-_Factori_Primi_1&amp;diff=3447"/>
		<updated>2023-04-11T12:04:41Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citește un număr natural, &#039;&#039;&#039;n (n≥2)&#039;&#039;&#039; și se cere să se scrie cel mai mic număr natural care are aceiași divizori primi ca &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran cel mai mic număr natural care are aceiași divizori primi ca &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ n ≤ 2^30&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:75&lt;br /&gt;
; Ieșire&lt;br /&gt;
:15&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:7&lt;br /&gt;
; Ieșire&lt;br /&gt;
:7&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def prime_factorization(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Calculează factorizarea în factori primi ai numărului n&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    nr = 1&lt;br /&gt;
    d = 2&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            n //= d&lt;br /&gt;
            p += 1&lt;br /&gt;
        if p:&lt;br /&gt;
            nr *= d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Verifică dacă intrarea este un număr întreg pozitiv mai mic sau egal cu 10^9.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if isinstance(n, int) and n &amp;gt; 0 and n &amp;lt;= 10**9:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        nr = prime_factorization(n)&lt;br /&gt;
        print(f&amp;quot;Factorizarea în factori primi a numărului {n} este: {nr}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
==Explicație rezolvare==&lt;br /&gt;
Acesta este un program Python care calculează factorizarea în factori primi ai unui număr întreg pozitiv dat. Programul verifică dacă numărul este valid (întreg pozitiv mai mic sau egal cu 10^9) și apoi calculează factorizarea în factori primi folosind o metodă iterativă.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0111_-_Nr_Fact&amp;diff=3446</id>
		<title>0111 - Nr Fact</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0111_-_Nr_Fact&amp;diff=3446"/>
		<updated>2023-04-11T11:55:26Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale şi determină numărul din şir care are număr maxim de factori primi.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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 nenule, separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;x&#039;&#039;&#039;, numărul din şir cu număr maxim de factori primi.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;lt; n &amp;lt; 1001&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*dacă în şir există mai multe numere cu număr maxim de factori primi, se va afişa cel mai mic dintre acestea&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:5&lt;br /&gt;
:72 30 12 75 17&lt;br /&gt;
; Ieșire&lt;br /&gt;
:30&lt;br /&gt;
&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;30&#039;&#039;&#039; are trei factori primi. Celelalte numere au mai puţini factori primi.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def numar_factori_primi(n):&lt;br /&gt;
    factori_primi = 0&lt;br /&gt;
    divizor = 2&lt;br /&gt;
    while divizor &amp;lt;= n:&lt;br /&gt;
        if n % divizor == 0:&lt;br /&gt;
            factori_primi += 1&lt;br /&gt;
            while n % divizor == 0:&lt;br /&gt;
                n //= divizor&lt;br /&gt;
        divizor += 1&lt;br /&gt;
    return factori_primi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, sir_numere):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000:&lt;br /&gt;
        return False&lt;br /&gt;
    for numar in sir_numere:&lt;br /&gt;
        if numar &amp;lt;= 0 or numar &amp;gt;= 2000000000:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de numere din sir: &amp;quot;))&lt;br /&gt;
    sir_numere = list(map(int, input(&amp;quot;Introduceti numerele separate prin spatii: &amp;quot;).split()))&lt;br /&gt;
    if validare_date(n, sir_numere):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        max_factori_primi = 0&lt;br /&gt;
        numar_max_factori_primi = sir_numere[0]&lt;br /&gt;
&lt;br /&gt;
        for numar in sir_numere:&lt;br /&gt;
            factori_primi = numar_factori_primi(numar)&lt;br /&gt;
            if factori_primi &amp;gt; max_factori_primi:&lt;br /&gt;
                max_factori_primi = factori_primi&lt;br /&gt;
                numar_max_factori_primi = numar&lt;br /&gt;
            elif factori_primi == max_factori_primi and numar &amp;lt; numar_max_factori_primi:&lt;br /&gt;
                numar_max_factori_primi = numar&lt;br /&gt;
&lt;br /&gt;
        print(f&amp;quot;Numarul cu cel mai mare numar de factori primi este: {numar_max_factori_primi}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
==Explicație rezolvare==&lt;br /&gt;
Acest cod verifică validitatea datelor de intrare și apoi găsește numărul dintr-un șir de numere care are cel mai mare număr de factori primi. Funcția &#039;&#039;&#039;numar_factori_primi(n)&#039;&#039;&#039; calculează numărul de factori primi ai unui număr, iar funcția &#039;&#039;&#039;validare_date(n, sir_numere)&#039;&#039;&#039; verifică dacă datele introduse sunt valide. Dacă datele sunt valide, programul găsește numărul din șir care are cel mai mare număr de factori primi și îl afișează.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2323_-_Prim_001&amp;diff=3445</id>
		<title>2323 - Prim 001</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2323_-_Prim_001&amp;diff=3445"/>
		<updated>2023-04-11T11:50:03Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se afle numărul divizorilor naturali ai lui &#039;&#039;&#039;n^n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul divizorilor lui &#039;&#039;&#039;n^n&#039;&#039;&#039;, modulo &#039;&#039;&#039;59999&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 10^13&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:4&lt;br /&gt;
; Ieșire&lt;br /&gt;
:9&lt;br /&gt;
== Explicație == &lt;br /&gt;
Numărul &#039;&#039;&#039;4^4=256&#039;&#039;&#039; are &#039;&#039;&#039;9&#039;&#039;&#039; divizori: &#039;&#039;&#039;1,2,4,8,16,32,64,128,256&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):   &lt;br /&gt;
    if not n.isdigit() or int(n) &amp;lt;= 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceți un număr întreg pozitiv: &amp;quot;)&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)      &lt;br /&gt;
        n = int(n)&lt;br /&gt;
        cnt, d = 1, 2&lt;br /&gt;
        cn = n&lt;br /&gt;
        while n &amp;gt; 1:&lt;br /&gt;
            p = 0&lt;br /&gt;
            while n % d == 0:&lt;br /&gt;
                n //= d&lt;br /&gt;
                p += 1&lt;br /&gt;
            cnt *= (p * cn + 1)&lt;br /&gt;
            d += 1&lt;br /&gt;
            if d * d &amp;gt; n:&lt;br /&gt;
                d = n&lt;br /&gt;
            while cnt &amp;gt;= 59999:&lt;br /&gt;
                cnt %= 59999&lt;br /&gt;
        print(cnt % 59999)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
Acest cod verifică dacă datele de intrare sunt corecte și apoi calculează numărul de divizori proprii ai unui număr întreg dat prin parcurgerea tuturor divizorilor primi ai numărului și calcularea puterilor lor. În cele din urmă, se afișează numărul de divizori proprii &#039;&#039;&#039;modulo 59999&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0063_-_Factorizare_1&amp;diff=3444</id>
		<title>0063 - Factorizare 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0063_-_Factorizare_1&amp;diff=3444"/>
		<updated>2023-04-11T11:46:14Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citeşte un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; şi determină factorul care apare în descompunerea în factori primi a lui &#039;&#039;&#039;n&#039;&#039;&#039; la puterea cea mai mare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul prim &#039;&#039;&#039;p&#039;&#039;&#039;, cu semnificaţia precizată.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;lt; n &amp;lt; 1.000.000.000&lt;br /&gt;
*dacă în descompunerea în factori primi a lui n apar mai mulţi factori la puterea maximă, se va afişa cel mai mare dintre ei&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:405&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 3&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;405 = 34 * 51&#039;&#039;&#039;. Astfel, factorul care apare la puterea cea mai mare este &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if n &amp;lt;= 1 or n &amp;gt;= 1000000000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
     &lt;br /&gt;
        factors = {}&lt;br /&gt;
        d = 2&lt;br /&gt;
        while d*d &amp;lt;= n:&lt;br /&gt;
            while (n % d) == 0:&lt;br /&gt;
                if d in factors:&lt;br /&gt;
                    factors[d] += 1&lt;br /&gt;
                else:&lt;br /&gt;
                    factors[d] = 1&lt;br /&gt;
                n //= d&lt;br /&gt;
            d += 1&lt;br /&gt;
        if n &amp;gt; 1:&lt;br /&gt;
            if n in factors:&lt;br /&gt;
                factors[n] += 1&lt;br /&gt;
            else:&lt;br /&gt;
                factors[n] = 1&lt;br /&gt;
       &lt;br /&gt;
        max_factor = 0&lt;br /&gt;
        max_power = 0&lt;br /&gt;
        for factor, power in factors.items():&lt;br /&gt;
            if power &amp;gt; max_power:&lt;br /&gt;
                max_factor = factor&lt;br /&gt;
                max_power = power&lt;br /&gt;
&lt;br /&gt;
        print(f&amp;quot;Factorul cu puterea cea mai mare în descompunerea lui n este {max_factor}&amp;quot;)&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Problema cere să scriem un program în Python care primește un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; și determină factorul care apare în descompunerea în factori primi a lui &#039;&#039;&#039;n&#039;&#039;&#039; la puterea cea mai mare. Algoritmul constă în factorizarea în factori primi a lui &#039;&#039;&#039;n&#039;&#039;&#039; și stocarea acestora într-un dicționar, apoi determinarea factorului cu puterea cea mai mare prin parcurgerea dicționarului. Pentru a valida datele de intrare, am scris o funcție &#039;&#039;&#039;validare_date&#039;&#039;&#039; care verifică dacă numărul &#039;&#039;&#039;n&#039;&#039;&#039; se află în intervalul impus de restricții. Programul afișează mesaje corespunzătoare în funcție de validitatea datelor de intrare prin utilizarea instrucțiunii &#039;&#039;&#039;if __name__ == &#039;__main__&#039;&#039;&#039;&#039;:&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0971_-_Max&amp;diff=3443</id>
		<title>0971 - Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0971_-_Max&amp;diff=3443"/>
		<updated>2023-04-11T11:44:08Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
În zorii zilei, harnicele albinuţe se pregătesc să zboare la cules de nectar. În apropierea stupului, se află o grădină fermecată cu &#039;&#039;&#039;N&#039;&#039;&#039; flori, numerotate &#039;&#039;&#039;1, 2,… N&#039;&#039;&#039;. Pentru fiecare floare se cunoaște numărul de petale.&lt;br /&gt;
&lt;br /&gt;
Anumite flori din grădină pot fi flori capcană. O astfel de floare are un număr prim de petale. Dacă o albină s-ar aşeza pe corola florii capcană, atunci floarea i-ar fura o cantitate de nectar egală cu numărul ei de petale.&lt;br /&gt;
&lt;br /&gt;
Alte flori pot fi florile abundenţei. Numărul de petale ale florii abundenţei are un număr impar de divizori. Dacă o albină s-ar aşeza pe corola unei astfel de flori, atunci ea i-ar dărui albinuţei o cantitate de nectar egală cu triplul numărului ei de petale.&lt;br /&gt;
&lt;br /&gt;
Celelalte flori pot fi flori obişnuite. Dacă o albină s-ar aşeza pe corola unei flori obişnuite, atunci floarea i-ar dărui albinuţei o cantitate de nectar egală cu numărul ei de petale.&lt;br /&gt;
&lt;br /&gt;
Regina stupului, le-a poruncit albinuţelor să adune cea mai mare cantitate de nectar care se poate culege din grădină, altfel … vor fi alungate din stup.Scrieţi un program care să citească numerele naturale &#039;&#039;&#039;N&#039;&#039;&#039; și numărul de petale ale fiecărei flori şi care să determine cantitatea maximă &#039;&#039;&#039;C&#039;&#039;&#039; de nectar pe care albinuţele o pot aduna din grădina fermecată.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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, reprezentând numărul de petale ale fiecărei flori.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;C&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100 000&#039;&#039;&#039;&lt;br /&gt;
*fiecare floare are cel mult &#039;&#039;&#039;10 000&#039;&#039;&#039; petale&lt;br /&gt;
*nectarul unei flori poate fi cules de o singură albină&lt;br /&gt;
*cantitatea maximă &#039;&#039;&#039;C&#039;&#039;&#039; de nectar culeasă este un număr natural, &#039;&#039;&#039;C ≤ 2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:8&lt;br /&gt;
:25 13 10 7 1 12 31 102&lt;br /&gt;
; Ieșire&lt;br /&gt;
:202&lt;br /&gt;
&lt;br /&gt;
== Explicație == &lt;br /&gt;
Cantitatea maximă de nectar se obţine din florile &#039;&#039;&#039;1, 3, 5, 6 şi 8&#039;&#039;&#039;. &#039;&#039;&#039;C=3x25+10+3x1+12+102=202&#039;&#039;&#039;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def is_prime(n):&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(math.sqrt(n))+1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def num_divisors(n):&lt;br /&gt;
    count = 0&lt;br /&gt;
    for i in range(1, int(math.sqrt(n))+1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            count += 2&lt;br /&gt;
            if i * i == n:&lt;br /&gt;
                count -= 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
def get_nectar(flower):&lt;br /&gt;
    if is_prime(flower):&lt;br /&gt;
        return -flower&lt;br /&gt;
    elif num_divisors(flower) % 2 == 1:&lt;br /&gt;
        return 3 * flower&lt;br /&gt;
    else:&lt;br /&gt;
        return flower&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, flowers):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if any(not (1 &amp;lt;= f &amp;lt;= 10000) for f in flowers):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    flowers = [int(x) for x in input().split()]&lt;br /&gt;
    &lt;br /&gt;
    if validare_date(n, flowers):&lt;br /&gt;
        C = sum(get_nectar(f) for f in flowers)&lt;br /&gt;
        print(C)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
==Explicație rezolvare==&lt;br /&gt;
Acest program calculează suma unor numere, în funcție de proprietățile numerelor respective.&lt;br /&gt;
&lt;br /&gt;
Mai întâi, sunt definite trei funcții:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;is_prime(n)&#039;&#039;&#039;: returnează &#039;&#039;&#039;True&#039;&#039;&#039; dacă numărul &#039;&#039;&#039;n&#039;&#039;&#039; este prim și &#039;&#039;&#039;False&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
*&#039;&#039;&#039;num_divisors(n)&#039;&#039;&#039;: returnează numărul de divizori ai numărului &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;get_nectar(flower)&#039;&#039;&#039;: returnează un număr în funcție de proprietățile florii. Dacă floarea are un număr prim de petale, se returnează negativul numărului de petale. Dacă floarea are un număr impar de divizori, se returnează triplul numărului de petale. În celelalte cazuri, se returnează numărul de petale.&lt;br /&gt;
Apoi, este definită funcția &#039;&#039;&#039;validare_date(n, flowers)&#039;&#039;&#039;, care primește ca parametri numărul &#039;&#039;&#039;n&#039;&#039;&#039; de flori și &#039;&#039;&#039;lista flowers&#039;&#039;&#039; cu numărul de petale al fiecărei flori. Această funcție verifică dacă valorile introduse respectă restricțiile impuse în enunțul problemei.&lt;br /&gt;
&lt;br /&gt;
În funcția principală &#039;&#039;&#039;(__main__)&#039;&#039;&#039;, se citesc valorile de intrare și se verifică dacă acestea sunt valide folosind funcția &#039;&#039;&#039;validare_date()&#039;&#039;&#039;. Dacă datele sunt valide, se calculează suma numerelor obținute prin aplicarea funcției &#039;&#039;&#039;get_nectar()&#039;&#039;&#039; pe fiecare element din &#039;&#039;&#039;lista flowers&#039;&#039;&#039;, și se afișează valoarea calculată. În caz contrar, se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1908_-_Fractii_Ired&amp;diff=3442</id>
		<title>1908 - Fractii Ired</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1908_-_Fractii_Ired&amp;diff=3442"/>
		<updated>2023-04-11T11:27:37Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Dându-se şirul de fracţii &#039;&#039;&#039;1/N, 2/N, 3/N, ...,N/N&#039;&#039;&#039;, să se afle câte fracţii sunt ireductibile.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;N&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul de fracţii ireductibile.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 2.000.000.022&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 2&lt;br /&gt;
== Explicație == &lt;br /&gt;
Fracţiile sunt &#039;&#039;&#039;1/4, 3/4&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if not isinstance(n, int) or n &amp;lt; 1:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        nr = n&lt;br /&gt;
&lt;br /&gt;
        d = 2&lt;br /&gt;
        while n &amp;gt; 1:&lt;br /&gt;
            if n % d == 0:&lt;br /&gt;
                nr //= d&lt;br /&gt;
                nr *= d - 1&lt;br /&gt;
                while n % d == 0:&lt;br /&gt;
                    n //= d&lt;br /&gt;
            if d == 2:&lt;br /&gt;
                d = 3&lt;br /&gt;
            else:&lt;br /&gt;
                d += 2&lt;br /&gt;
            if d * d &amp;gt; n:&lt;br /&gt;
                d = n&lt;br /&gt;
&lt;br /&gt;
        print(nr)&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
==Explicație rezolvare==&lt;br /&gt;
Codul Python calculează funcția Euler Totient pentru un număr natural introdus de utilizator. În timpul procesului de calcul, se parcurg divizorii primi distincti ai numărului și se aplică o formulă specifică pentru a obține valoarea funcției. Codul include, de asemenea, o verificare a datelor de intrare pentru a asigura validitatea acestora.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3353_-_Factori_2&amp;diff=3441</id>
		<title>3353 - Factori 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3353_-_Factori_2&amp;diff=3441"/>
		<updated>2023-04-11T11:06:40Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale. Afișați numărul pentru care produsul factorilor primi este mai mare. Dacă cele două numere au același produs al factorilor primi, afișați-l pe cel mai mic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură două numere naturale.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*cele două numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:36 26&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 26&lt;br /&gt;
== Explicație == &lt;br /&gt;
Factorii primi ai lui &#039;&#039;&#039;36&#039;&#039;&#039; sunt &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;3&#039;&#039;&#039;, cu produsul &#039;&#039;&#039;6&#039;&#039;&#039;. Factorii primi ai lui &#039;&#039;&#039;26&#039;&#039;&#039; sunt &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;13&#039;&#039;&#039;, cu produsul &#039;&#039;&#039;26&#039;&#039;&#039;. Rezultatul este &#039;&#039;&#039;26&#039;&#039;&#039;, pentru că are produsul factorilor primi mai mare.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def desc(n):&lt;br /&gt;
    prod = 1&lt;br /&gt;
    d = 2&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            n //= d&lt;br /&gt;
            p += 1&lt;br /&gt;
        if p:&lt;br /&gt;
            prod *= d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
    return prod&lt;br /&gt;
&lt;br /&gt;
def validare_date(a, b):&lt;br /&gt;
    if a &amp;lt; 1 or a &amp;gt; 10**18 or b &amp;lt; 1 or b &amp;gt; 10**18:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    a, b = map(int, input().split())&lt;br /&gt;
    if validare_date(a, b):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        prod1 = desc(a)&lt;br /&gt;
        prod2 = desc(b)&lt;br /&gt;
        if prod1 &amp;gt; prod2:&lt;br /&gt;
            print(a)&lt;br /&gt;
        elif prod1 == prod2:&lt;br /&gt;
            print(min(a, b))&lt;br /&gt;
        else:&lt;br /&gt;
            print(b)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Codul verifică dacă două numere date sunt în intervalul [1, 10^18] și calculează divizorul cel mai mic comun între ele. Pentru a face acest lucru, se utilizează o funcție care găsește factorii primi ai fiecărui număr și apoi calculează produsul lor. Dacă datele de intrare nu corespund restricțiilor impuse, programul afișează un mesaj de eroare. Altfel, programul afișează divizorul cel mai mic comun și numărul corespunzător cu cel mai mic divizor.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3352_-_Factori_1&amp;diff=3440</id>
		<title>3352 - Factori 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3352_-_Factori_1&amp;diff=3440"/>
		<updated>2023-04-11T11:00:06Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale. Afișați numărul pentru care suma factorilor primi distincți este mai mare. Dacă cele două numere au aceași sumă a factorilor primi, afișați-l pe cel mai mic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură două numere naturale.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*cele două numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:36 26&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 26&lt;br /&gt;
== Explicație == &lt;br /&gt;
Factorii primi ai lui &#039;&#039;&#039;36&#039;&#039;&#039; sunt &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;3&#039;&#039;&#039;, cu suma &#039;&#039;&#039;5&#039;&#039;&#039;. Factorii primi ai lui &#039;&#039;&#039;26&#039;&#039;&#039; sunt &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;13&#039;&#039;&#039;, cu suma &#039;&#039;&#039;15&#039;&#039;&#039;. Rezultatul este &#039;&#039;&#039;26&#039;&#039;&#039;, pentru că are suma factorilor primi mai mare.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def prim(x):&lt;br /&gt;
    d = 2&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    while x &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while x % d == 0:&lt;br /&gt;
            p += 1&lt;br /&gt;
            x //= d&lt;br /&gt;
        if p:&lt;br /&gt;
            cnt += d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; x:&lt;br /&gt;
            d = x&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
def validate_input(x, y):&lt;br /&gt;
    if x &amp;lt; 0 or y &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if x == 0 and y == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    x, y = map(int, input().split())&lt;br /&gt;
    if validate_input(x, y):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        if prim(x) &amp;gt; prim(y):&lt;br /&gt;
            print(x)&lt;br /&gt;
        elif prim(x) &amp;lt; prim(y):&lt;br /&gt;
            print(y)&lt;br /&gt;
        else:&lt;br /&gt;
            print(min(x, y))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest program primește de la utilizator două numere întregi și verifică dacă acestea îndeplinesc anumite condiții. Dacă numerele sunt valabile, programul afișează numărul dintre cele două care are suma cifrelor factorilor primi mai mare. Dacă suma este aceeași pentru ambele numere, programul va afișa cel mai mic dintre cele două numere. Dacă cele două numere nu sunt valabile, programul afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2312_-_GuIT&amp;diff=3439</id>
		<title>2312 - GuIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2312_-_GuIT&amp;diff=3439"/>
		<updated>2023-04-11T10:57:43Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Ghiţă s-a hotărât să plece de-acasă de Ignat, având nişte previziuni sumbre. Neavând bani, s-a gândit să-şi scoată un single de sezon, “guIT”. Din vânzarea lui a obţinut frumoasa sumă de &#039;&#039;&#039;n&#039;&#039;&#039; dolari.Pentru a câştiga un meniu vegetarian de Crăciun, trebuie să aflaţi suma numerelor prime din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039;, ştiind că &#039;&#039;&#039;n&#039;&#039;&#039; este produs de trei numere prime distincte.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând suma celor trei numere prime din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 10^12&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:105&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 15&lt;br /&gt;
== Explicație == &lt;br /&gt;
&#039;&#039;&#039;105 = 3•5•7&#039;&#039;&#039;, deci suma este &#039;&#039;&#039;3+5+7=15&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validare_date_numar(n):&lt;br /&gt;
    if 1 &amp;lt;= int(n) &amp;lt;= 1000000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def validare_date(k):&lt;br /&gt;
    if 1 &amp;lt;= int(k) &amp;lt;= 1000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def print_num(n, k):&lt;br /&gt;
    s = 0&lt;br /&gt;
    d = 2&lt;br /&gt;
&lt;br /&gt;
    while n &amp;gt; 1:&lt;br /&gt;
        p = 0&lt;br /&gt;
        while n % d == 0:&lt;br /&gt;
            n //= d&lt;br /&gt;
            p += 1&lt;br /&gt;
        if p &amp;gt; 0:&lt;br /&gt;
            s += d&lt;br /&gt;
        d += 1&lt;br /&gt;
        if d * d &amp;gt; n:&lt;br /&gt;
            d = n&lt;br /&gt;
&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input()&lt;br /&gt;
    k = input()&lt;br /&gt;
    if validare_date_numar(n) and validare_date(k):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        numar = print_num(int(n), int(k))&lt;br /&gt;
        print(numar)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acesta este un cod Python care primește două numere, verifică dacă acestea sunt valide și apoi calculează suma factorilor primi ai primului număr care apar de cel puțin a doua valoare dată. Dacă numerele introduse sunt valide, codul va afișa suma factorilor primi, altfel va afișa un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2913_-_Proth_Number&amp;diff=3438</id>
		<title>2913 - Proth Number</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2913_-_Proth_Number&amp;diff=3438"/>
		<updated>2023-04-11T10:54:10Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Un număr natural n se numește număr Proth dacă este de forma &#039;&#039;&#039;n=k*2p+1&#039;&#039;&#039;, unde &#039;&#039;&#039;k&#039;&#039;&#039; și &#039;&#039;&#039;p&#039;&#039;&#039; sunt numere naturale, &#039;&#039;&#039;k&#039;&#039;&#039; este impar și &#039;&#039;&#039;k &amp;lt; 2p&#039;&#039;&#039;.&lt;br /&gt;
Să se scrie un program care citește un număr natural și verifică dacă este număr Proth.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran mesajul &#039;&#039;&#039;DA&#039;&#039;&#039; dacă &#039;&#039;&#039;n&#039;&#039;&#039; este număr Proth, respectiv &#039;&#039;&#039;NU&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 25&lt;br /&gt;
; Ieșire&lt;br /&gt;
:DA&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if not 1 &amp;lt;= n &amp;lt;= 1000000000:&lt;br /&gt;
        print(&amp;quot;Numarul trebuie sa fie intre 1 si 1000000000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def este_numar_proth(n):&lt;br /&gt;
    if not validare_date(n):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    k = 1&lt;br /&gt;
    while k &amp;lt; n:&lt;br /&gt;
        p = (n - 1) // (2**k)&lt;br /&gt;
        if 2**k * p + 1 == n and p % 2 == 1:&lt;br /&gt;
            return True&lt;br /&gt;
        k += 1&lt;br /&gt;
&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul n: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        if este_numar_proth(n):&lt;br /&gt;
            print(f&amp;quot;{n} este numar Proth.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(f&amp;quot;{n} nu este numar Proth.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod este un program scris în Python care verifică dacă un număr dat este un număr Proth. Programul definește două funcții, una care validează numărul dat și alta care verifică dacă numărul este un număr Proth. Programul verifică dacă numărul dat este valid, iar dacă este, afișează un mesaj de confirmare și verifică dacă numărul este un număr Proth. Dacă numărul este un număr Proth, programul afișează un mesaj care confirmă acest lucru, altfel afișează un mesaj care indică faptul că numărul nu este un număr Proth. Dacă numărul dat nu este valid, programul afișează un mesaj care indică acest lucru.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2324_-_Prim_002&amp;diff=3437</id>
		<title>2324 - Prim 002</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2324_-_Prim_002&amp;diff=3437"/>
		<updated>2023-04-11T10:44:50Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Anul &#039;&#039;&#039;2017&#039;&#039;&#039; tocmai s-a încheiat, iar nostalgicii suferă în tăcere deoarece acesta era număr prim. Dorel, un personaj întreprinzător, s-a gândit să afle pentru un număr natural n dat, care este cel mai mare divizor prim al acestuia.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cel mai mare divizor prim al lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 10^14&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 2018&lt;br /&gt;
; Ieșire&lt;br /&gt;
:1009&lt;br /&gt;
== Explicație == &lt;br /&gt;
Divizorii lui &#039;&#039;&#039;2018&#039;&#039;&#039; sunt &#039;&#039;&#039;1, 2, 1009, 2018,&#039;&#039;&#039; iar cel mai mare divizor prim este &#039;&#039;&#039;1009&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Verifică dacă n se încadrează în intervalul [1, 10^14].&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 10**14&lt;br /&gt;
&lt;br /&gt;
def este_prim(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Verifică dacă n este un număr prim.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(n**0.5)+1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
    if not validare_date(n):&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu se încadrează în intervalul [1, 10^14].&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
        &lt;br /&gt;
    if este_prim(n):&lt;br /&gt;
        print(n, &amp;quot;este un număr prim.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        d = 2&lt;br /&gt;
        max_div_prim = 1&lt;br /&gt;
        while n &amp;gt; 1:&lt;br /&gt;
            if n % d == 0:&lt;br /&gt;
                n //= d&lt;br /&gt;
                if este_prim(d):&lt;br /&gt;
                    max_div_prim = d&lt;br /&gt;
            else:&lt;br /&gt;
                d += 1&lt;br /&gt;
        print(&amp;quot;Cel mai mare divizor prim al lui&amp;quot;, n, &amp;quot;este&amp;quot;, max_div_prim)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Înainte de a începe căutarea divizorului prim, se verifică dacă numărul dat se încadrează în intervalul [1, 10^14], utilizând funcția &#039;&#039;&#039;validare_date&#039;&#039;&#039;. Dacă numărul introdus nu se încadrează în acest interval, programul afișează un mesaj de eroare și se oprește cu ajutorul funcției &#039;&#039;&#039;exit()&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se verifică dacă numărul este prim utilizând funcția &#039;&#039;&#039;este_prim&#039;&#039;&#039;. Dacă numărul este prim, se afișează un mesaj corespunzător.&lt;br /&gt;
&lt;br /&gt;
Dacă numărul nu este prim, se caută cel mai mare divizor prim al numărului prin intermediul unui buclă while. Începând cu divizorul 2, se verifică dacă numărul dat se divide cu acesta. Dacă da, se împarte numărul la acest divizor și se verifică dacă divizorul este prim. Dacă da, divizorul este reținut ca și cel mai mare divizor prim găsit până în acel moment.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se trece la următorul divizor. Procesul se repetă până când numărul dat ajunge la 1. La final, programul afișează cel mai mare divizor prim găsit, sau 1 dacă nu a fost găsit niciun divizor prim.&lt;br /&gt;
&lt;br /&gt;
În general, codul are o structură clară și folosește funcții separate pentru a îmbunătăți legibilitatea și modularitatea programului.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4295_-_Factor_Exp_Max&amp;diff=3424</id>
		<title>4295 - Factor Exp Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4295_-_Factor_Exp_Max&amp;diff=3424"/>
		<updated>2023-04-11T10:34:50Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se determine factorul prim din descompunerea lui &#039;&#039;&#039;n&#039;&#039;&#039; care apare la puterea cea mai mare. Dacă există mai mulți factori care apar la putere maximă, se va afișa cel mai mare dintre ei.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran factorul prim cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;n&#039;&#039;&#039; este un număr natural strict mai mare decât &#039;&#039;&#039;1&#039;&#039;&#039; și are cel mult &#039;&#039;&#039;12&#039;&#039;&#039; cifre (este de tip &#039;&#039;&#039;long long&#039;&#039;&#039;)&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 7623&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 11&lt;br /&gt;
== Explicație == &lt;br /&gt;
Descompunerea lui &#039;&#039;&#039;n=7623&#039;&#039;&#039; în factori este &#039;&#039;&#039;32 * 71 * 112&#039;&#039;&#039;. Sunt doi factori de exponent maxim &#039;&#039;&#039;2&#039;&#039;&#039;, din care cel mai mare este &#039;&#039;&#039;11&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(n)&lt;br /&gt;
        if n &amp;gt; 1 and n &amp;lt; 10**12:&lt;br /&gt;
            return n&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Numarul trebuie sa fie un numar natural mai mare decat 1 si mai mic decat 10^12.&amp;quot;)&lt;br /&gt;
            return None&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Nu ati introdus un numar natural valid.&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceti numarul n: &amp;quot;)&lt;br /&gt;
    n = validare_date(n)&lt;br /&gt;
&lt;br /&gt;
    if n:&lt;br /&gt;
        i = 2&lt;br /&gt;
        factori = {}&lt;br /&gt;
        while i &amp;lt;= math.sqrt(n):&lt;br /&gt;
            p = 0&lt;br /&gt;
            while n % i == 0:&lt;br /&gt;
                p += 1&lt;br /&gt;
                n //= i&lt;br /&gt;
            if p &amp;gt; 0:&lt;br /&gt;
                factori[i] = p&lt;br /&gt;
            i += 1&lt;br /&gt;
        if n &amp;gt; 1:&lt;br /&gt;
            factori[n] = 1&lt;br /&gt;
&lt;br /&gt;
        max_putere = max(factori.values())&lt;br /&gt;
        factor_max_putere = max([f for f in factori.keys() if factori[f] == max_putere])&lt;br /&gt;
        print(factor_max_putere)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Am implementat o soluție în Python pentru a găsi cel mai mare factor prim al unui număr natural dat. Am folosit o funcție de validare a datelor de intrare pentru a verifica dacă numărul dat este un număr natural între 2 și 10^12. Am apoi parcurge factorii primi ai numărului dat și am folosit un dicționar pentru a stoca puterile fiecărui factor prim. Am aflat factorul prim cu cea mai mare putere și l-am afișat. Dacă numărul de intrare nu a trecut validarea, am afișat un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0062_-_Factorizare&amp;diff=3399</id>
		<title>0062 - Factorizare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0062_-_Factorizare&amp;diff=3399"/>
		<updated>2023-04-11T10:23:26Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citeşte un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se afişeze descompunerea în factori primi a lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran perechile &#039;&#039;&#039;b p&#039;&#039;&#039;, reprezentând factorii primi şi puterile corespunzătoare.&lt;br /&gt;
Perechile se afişează câte una pe o linie a ecranului, în ordinea crescătoare a bazelor. Cele două valori din pereche sunt separate printr-un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;lt; n &amp;lt; 2.100.000.000&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 135&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 3 3&lt;br /&gt;
: 5 1&lt;br /&gt;
&lt;br /&gt;
== Explicație == &lt;br /&gt;
*&#039;&#039;&#039;135 = 33 * 51&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(n)&lt;br /&gt;
        if n &amp;gt; 1 and n &amp;lt; 2100000000:&lt;br /&gt;
            return n&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Numarul trebuie sa fie un numar natural mai mare decat 1 si mai mic decat 2100000000.&amp;quot;)&lt;br /&gt;
            return None&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Nu ati introdus un numar natural valid.&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceti numarul n: &amp;quot;)&lt;br /&gt;
    n = validare_date(n)&lt;br /&gt;
    if n:&lt;br /&gt;
        i = 2&lt;br /&gt;
        while i &amp;lt;= n:&lt;br /&gt;
            p = 0&lt;br /&gt;
            while n % i == 0:&lt;br /&gt;
                p += 1&lt;br /&gt;
                n //= i&lt;br /&gt;
            if p &amp;gt; 0:&lt;br /&gt;
                print(i, p)&lt;br /&gt;
            i += 1&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
==Explicație rezolvare==&lt;br /&gt;
Acest cod primește un număr întreg pozitiv &#039;&#039;&#039;n&#039;&#039;&#039; de la utilizator și verifică dacă este un număr natural valid (adică un număr întreg pozitiv mai mare decât 1 și mai mic decât 2.100.000.000).&lt;br /&gt;
&lt;br /&gt;
Dacă numărul este valid, programul afișează factorii primi ai numărului. Factorii primi sunt numerele prime care pot fi înmulțite pentru a obține numărul inițial. De exemplu, factorii primi ai numărului 12 sunt 2 și 3, deoarece 12 = 2 * 2 * 3.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla factorii primi ai numărului, programul împarte succesiv numărul la numerele prime începând cu 2, până când rămâne doar 1. Dacă numărul este divizibil cu un anumit număr prim, programul afișează numărul prim și de câte ori apare acesta în descompunerea factorială a numărului.&lt;br /&gt;
&lt;br /&gt;
Dacă numărul nu este valid, programul afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1319_-_Descompunere_factori&amp;diff=3395</id>
		<title>1319 - Descompunere factori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1319_-_Descompunere_factori&amp;diff=3395"/>
		<updated>2023-04-11T10:14:30Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citeşte un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se determine descompunerea în factori primi a lui &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran factorii primi ai lui &#039;&#039;&#039;n&#039;&#039;&#039; în ordine crescătoare, separați prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;2 ≤ n ≤ 2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 1100&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 2 2 5 5 11&lt;br /&gt;
== Explicație == &lt;br /&gt;
Numărul &#039;&#039;&#039;n=1100=2*2*5*5*11&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validare_date(date):&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(date)&lt;br /&gt;
        if n &amp;gt;= 2 and n &amp;lt;= 2000000000:&lt;br /&gt;
            return n&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Numarul introdus trebuie sa fie un numar natural intre 2 si 2.000.000.000&amp;quot;)&lt;br /&gt;
            return None&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Nu ati introdus un numar natural valid&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceti numarul n: &amp;quot;)&lt;br /&gt;
    n = validare_date(n)&lt;br /&gt;
&lt;br /&gt;
    if n:&lt;br /&gt;
        i = 2&lt;br /&gt;
        while i &amp;lt;= math.sqrt(n):&lt;br /&gt;
            if n % i == 0:&lt;br /&gt;
                print(i, end=&#039; &#039;)&lt;br /&gt;
                n //= i&lt;br /&gt;
            else:&lt;br /&gt;
                i += 1&lt;br /&gt;
&lt;br /&gt;
        if n &amp;gt; 1:&lt;br /&gt;
            print(n, end=&#039; &#039;)&lt;br /&gt;
        &lt;br /&gt;
        print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod realizează factorizarea în factori primi a unui număr natural dat de utilizator. Factorizarea în factori primi reprezintă descompunerea unui număr natural în produsul de numere prime.&lt;br /&gt;
&lt;br /&gt;
Codul începe prin definirea funcției &#039;&#039;&#039;validare_date&#039;&#039;&#039;, care primește un argument &#039;&#039;&#039;date&#039;&#039;&#039; și încearcă să convertască acest argument la un număr întreg folosind funcția &#039;&#039;&#039;int()&#039;&#039;&#039;. Dacă conversia este posibilă și numărul este mai mare sau egal cu 2 și mai mic sau egal cu 2.000.000.000, atunci funcția returnează acest număr. În caz contrar, funcția afișează un mesaj corespunzător și returnează valoarea None.&lt;br /&gt;
&lt;br /&gt;
După definirea funcției &#039;&#039;&#039;validare_date&#039;&#039;&#039;, codul verifică dacă acesta este rulat ca program principal folosind instrucțiunea &#039;&#039;&#039;if name == &#039;main&#039;:&#039;&#039;&#039;. În caz afirmativ, utilizatorului i se cere să introducă numărul n prin intermediul funcției &#039;&#039;&#039;input()&#039;&#039;&#039;. Apoi, valoarea introdusă este validată prin apelarea funcției &#039;&#039;&#039;validare_date&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea introdusă este validă, codul continuă să factorizeze numărul în factori primi. În acest scop, este folosită o buclă &#039;&#039;&#039;while&#039;&#039;&#039; care parcurge valorile între 2 și radicalul numărului dat (inclusiv). Dacă numărul dat este divizibil cu valoarea curentă a buclei, atunci această valoare reprezintă un factor prim și este afișată. De asemenea, numărul dat este împărțit la acest factor. Dacă numărul dat nu este divizibil cu valoarea curentă a buclei, atunci valoarea curentă este incrementată cu 1.&lt;br /&gt;
&lt;br /&gt;
După ce bucla se termină, numărul dat trebuie să fie un număr prim sau să fie egal cu 1 (deoarece toți ceilalți factori primi au fost deja afișați). Dacă numărul dat este mai mare decât 1, atunci acesta este afișat.&lt;br /&gt;
&lt;br /&gt;
În cele din urmă, este afișat un mesaj corespunzător care indică dacă datele introduse de utilizator corespund restricțiilor impuse de funcția &#039;&#039;&#039;validare_date&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0967_-_Cifre_8&amp;diff=3344</id>
		<title>0967 - Cifre 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0967_-_Cifre_8&amp;diff=3344"/>
		<updated>2023-04-09T21:06:53Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Scrieţi un program care să citească numerele &#039;&#039;&#039;c&#039;&#039;&#039;, &#039;&#039;&#039;n&#039;&#039;&#039; şi şirul &#039;&#039;&#039;s&#039;&#039;&#039;, şi să determine:&lt;br /&gt;
a) suma tuturor numerelor din şirul &#039;&#039;&#039;s&#039;&#039;&#039; care au proprietatea că sunt numere prime&lt;br /&gt;
b) numărul de apariţii ale cifrei &#039;&#039;&#039;c&#039;&#039;&#039; în scrierea zecimală a tuturor numerelor din şirul &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
c) numărul minim de numere din şirul &#039;&#039;&#039;v&#039;&#039;&#039;&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n c&#039;&#039;&#039;, iar apoi cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale șirului &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran trei numere, câte unul pe o linie, reprezentând în ordine:&lt;br /&gt;
*suma tuturor numerelor din şirul &#039;&#039;&#039;s&#039;&#039;&#039; care au proprietatea că sunt numere prime&lt;br /&gt;
*numărul de apariţii ale cifrei &#039;&#039;&#039;c&#039;&#039;&#039; în scrierea zecimală a tuturor numerelor din şirul &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
*numărul minim de valori din şirul &#039;&#039;&#039;v&#039;&#039;&#039;&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*Numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;c&#039;&#039;&#039; sunt naturale&lt;br /&gt;
*&#039;&#039;&#039;2 ≤ n ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;0 ≤ c ≤ 9&#039;&#039;&#039;&lt;br /&gt;
*toate cele &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale din şirul &#039;&#039;&#039;s&#039;&#039;&#039; sunt mai mici sau egale cu &#039;&#039;&#039;30000&#039;&#039;&#039;&lt;br /&gt;
*pentru rezolvarea cerinţei a) se acordă &#039;&#039;&#039;40%&#039;&#039;&#039; din punctaj, pentru cerinţa b) &#039;&#039;&#039;20%&#039;&#039;&#039; din punctaj şi pentru cerinţa c) &#039;&#039;&#039;40%&#039;&#039;&#039; din punctaj.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 10 9&lt;br /&gt;
: 1943 31 19 1199 34 941 7971 131 223 6&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 1345&lt;br /&gt;
: 6 &lt;br /&gt;
: 4&lt;br /&gt;
&lt;br /&gt;
== Explicație == &lt;br /&gt;
a) numerele prime din şirul &#039;&#039;&#039;s&#039;&#039;&#039; sunt: &#039;&#039;&#039;31, 19, 941, 131 şi 223&#039;&#039;&#039;. Suma acestora este &#039;&#039;&#039;1345&#039;&#039;&#039;.&lt;br /&gt;
b) cifra &#039;&#039;&#039;c=9&#039;&#039;&#039; apare de &#039;&#039;&#039;6&#039;&#039;&#039; ori în scrierea numerelor din &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;br /&gt;
c) cifrele impare ale unităţilor numerelor din &#039;&#039;&#039;s&#039;&#039;&#039; sunt, în ordine crescătoare: &#039;&#039;&#039;1, 1, 1, 1, 3, 3, 9, 9&#039;&#039;&#039;. Se pot forma minimum &#039;&#039;&#039;4&#039;&#039;&#039; numere cu toate cifrele identice: &#039;&#039;&#039;11, 11, 33, 99&#039;&#039;&#039;, fiecare număr din noul şir având numărul maxim posibil de cifre, adică &#039;&#039;&#039;2&#039;&#039;&#039;. Numărul minim de termeni ai şirului este egal cu &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar ** 0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def aparitii_cifra(numar, cifra):&lt;br /&gt;
    aparitii = 0&lt;br /&gt;
    while numar &amp;gt; 0:&lt;br /&gt;
        if numar % 10 == cifra:&lt;br /&gt;
            aparitii += 1&lt;br /&gt;
        numar //= 10&lt;br /&gt;
    return aparitii&lt;br /&gt;
&lt;br /&gt;
def minim_numere(sir):&lt;br /&gt;
    frecventa = {}&lt;br /&gt;
    for numar in sir:&lt;br /&gt;
        if numar not in frecventa:&lt;br /&gt;
            frecventa[numar] = 4&lt;br /&gt;
        else:&lt;br /&gt;
            frecventa[numar] += 1&lt;br /&gt;
    return min(frecventa.values())&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, c, s):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (0 &amp;lt;= c &amp;lt;= 9):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(1 &amp;lt;= x &amp;lt;= 30000 for x in s):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
n, c = map(int, input().split())&lt;br /&gt;
s = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
if not validare_date(n, c, s):&lt;br /&gt;
    print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    suma_prime = 0&lt;br /&gt;
    aparitii_cifra_c = 0&lt;br /&gt;
&lt;br /&gt;
    for numar in s:&lt;br /&gt;
        if este_prim(numar):&lt;br /&gt;
            suma_prime += numar&lt;br /&gt;
        aparitii_cifra_c += aparitii_cifra(numar, c)&lt;br /&gt;
&lt;br /&gt;
    nr_minim_numere = minim_numere(s)&lt;br /&gt;
&lt;br /&gt;
    print(suma_prime)&lt;br /&gt;
    print(aparitii_cifra_c)&lt;br /&gt;
    print(nr_minim_numere)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acesta este un program care primește o listă de numere și o cifră, efectuează anumite calcule pe baza acestor date și afișează rezultatele. Programul verifică dacă datele de intrare sunt valide și afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2305_-_Numere_21&amp;diff=3337</id>
		<title>2305 - Numere 21</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2305_-_Numere_21&amp;diff=3337"/>
		<updated>2023-04-09T20:13:46Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citesc perechi de numere naturale până la citirea a două valori nule. Să se calculeze suma numerelor din perechile pentru care atât valorile inițiale cât și oglinditele lor sunt prime între ele.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură perechi de numere naturale. Citirea se încheie la introducerea a două valori nule.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând valoarea cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*se vor citi cel mult &#039;&#039;&#039;40&#039;&#039;&#039; de perechi de numere;&lt;br /&gt;
*toate numerele citite vor fi mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;;&lt;br /&gt;
*toate numerele citite sunt nenule, cu excepția ultimelor două;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 14 516&lt;br /&gt;
: 14 416&lt;br /&gt;
: 13 13&lt;br /&gt;
: 123 321&lt;br /&gt;
: 156 2651&lt;br /&gt;
: 456 674&lt;br /&gt;
: 0 0&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 2807&lt;br /&gt;
&lt;br /&gt;
== Explicație == &lt;br /&gt;
Singura pereche care respectă regula este &#039;&#039;&#039;156 2651&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(a, b):&lt;br /&gt;
    if a &amp;lt; 1 or a &amp;gt; 10**6:&lt;br /&gt;
        return False&lt;br /&gt;
    if b &amp;lt; 1 or b &amp;gt; 10**6:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def ogl(n):&lt;br /&gt;
    ogl = 0&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        ogl = ogl * 10 + n % 10&lt;br /&gt;
        n //= 10&lt;br /&gt;
    return ogl&lt;br /&gt;
&lt;br /&gt;
def pie(a, b):&lt;br /&gt;
    while b &amp;gt; 0:&lt;br /&gt;
        r = a % b&lt;br /&gt;
        a = b&lt;br /&gt;
        b = r&lt;br /&gt;
    if a == 1:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    a, b = map(int, input().split())&lt;br /&gt;
    if not validare_date(a, b):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        s = 0&lt;br /&gt;
        while a != 0 or b != 0:&lt;br /&gt;
            if pie(a, b) and pie(ogl(a), ogl(b)):&lt;br /&gt;
                s += a + b&lt;br /&gt;
            a, b = map(int, input().split())&lt;br /&gt;
        print(s)&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod verifică dacă două numere întregi sunt prime între ele și dacă oglinditele lor sunt, de asemenea, prime între ele. Se primesc două astfel de numere de la utilizator și se efectuează verificările respective. Dacă cele două numere respectă ambele condiții, ele sunt adunate la o variabilă &#039;&#039;&#039;s&#039;&#039;&#039;. Procesul se repetă până când utilizatorul introduce alte valori sau se atinge o limită. La final, se afișează valoarea acumulată în variabila &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0407_-_Oglindit_Prim&amp;diff=3336</id>
		<title>0407 - Oglindit Prim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0407_-_Oglindit_Prim&amp;diff=3336"/>
		<updated>2023-04-09T19:44:10Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir cu &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați suma celor care au oglinditul număr prim.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând rezultatul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:6&lt;br /&gt;
133 35 41 31 90 7&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 206&lt;br /&gt;
== Explicație == &lt;br /&gt;
Dintre cele &#039;&#039;&#039;6&#039;&#039;&#039; numere citite au oglinditul număr prim: &#039;&#039;&#039;133 35 31 7&#039;&#039;&#039;. Suma lor este &#039;&#039;&#039;206&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def prim(n):&lt;br /&gt;
    if n == 0 or n == 1:&lt;br /&gt;
        return 0&lt;br /&gt;
    if n == 2:&lt;br /&gt;
        return 1&lt;br /&gt;
    if n % 2 == 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    for i in range(3, int(n**0.5) + 1, 2):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return 0&lt;br /&gt;
    return 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if n &amp;lt;= 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de valori: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        s = 0&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            x = int(input(f&amp;quot;Introduceti valoarea {i+1}: &amp;quot;))&lt;br /&gt;
            if validare_date(x):&lt;br /&gt;
                ogl = 0&lt;br /&gt;
                aux = x&lt;br /&gt;
                while x != 0:&lt;br /&gt;
                    ogl = ogl*10 + x%10&lt;br /&gt;
                    x //= 10&lt;br /&gt;
                if prim(ogl):&lt;br /&gt;
                    s += aux&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
                break&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;\nDatele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
            print(f&amp;quot;Suma numerelor care au oglinda prima este: {s}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&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;
==Explicație rezolvare==&lt;br /&gt;
Acest program primește un număr &#039;&#039;&#039;n&#039;&#039;&#039; de valori de la tastatură și calculează suma tuturor numerelor care au oglinda primă.&lt;br /&gt;
&lt;br /&gt;
Oglinda unui număr este reprezentată de cifrele numărului în ordine inversă. De exemplu, oglinda numărului 1234 este 4321.&lt;br /&gt;
&lt;br /&gt;
Pentru a determina dacă un număr este prim, se verifică dacă acesta este divizibil cu numerele între 2 și rădăcina pătrată a numărului (exclusiv). Dacă numărul este divizibil cu oricare dintre aceste numere, nu este prim.&lt;br /&gt;
&lt;br /&gt;
Funcția &#039;&#039;&#039;validare_date&#039;&#039;&#039; verifică dacă un număr este pozitiv.&lt;br /&gt;
&lt;br /&gt;
Programul afișează mesaje de eroare în cazul în care datele introduse nu corespund restricțiilor impuse și afișează suma numerelor care au oglinda primă în caz contrar.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0406_-_Sum_Cif_Prim&amp;diff=3330</id>
		<title>0406 - Sum Cif Prim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0406_-_Sum_Cif_Prim&amp;diff=3330"/>
		<updated>2023-04-09T19:35:57Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir cu &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați câte dintre ele sunt prime și au suma cifrelor un număr prim.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând rezultatul cerut.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 6&lt;br /&gt;
83 36 53 401 90 7&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 3&lt;br /&gt;
== Explicație == &lt;br /&gt;
Dintre cele &#039;&#039;&#039;6&#039;&#039;&#039; numere citite sunt prime : &#039;&#039;&#039;83 53 401 7&#039;&#039;&#039;. Dintre ele &#039;&#039;&#039;83 401 7&#039;&#039;&#039;  suma cifrelor număr prim, respectiv &#039;&#039;&#039;11 5 7&#039;&#039;&#039;. În consecință, sunt &#039;&#039;&#039;3&#039;&#039;&#039; numere care respectă regula.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def is_prime(n):&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(n ** 0.5) + 1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def sum_digits(n):&lt;br /&gt;
    return sum(int(d) for d in str(n))&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, nums):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000:&lt;br /&gt;
        return False&lt;br /&gt;
    for num in nums:&lt;br /&gt;
        if num &amp;lt; 1 or num &amp;gt; 1000000000:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul de numere: &amp;quot;))&lt;br /&gt;
    nums = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        num = int(input(f&amp;quot;Introduceți numărul {i+1}: &amp;quot;))&lt;br /&gt;
        nums.append(num)&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n, nums):&lt;br /&gt;
        count = 0&lt;br /&gt;
        for num in nums:&lt;br /&gt;
            if is_prime(num) and is_prime(sum_digits(num)):&lt;br /&gt;
                count += 1&lt;br /&gt;
        print(f&amp;quot;Numărul de numere prime cu suma cifrelor primă este: {count}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod primește un număr &#039;&#039;&#039;n&#039;&#039;&#039; și o listă de &#039;&#039;&#039;n&#039;&#039;&#039; numere și numără câte dintre aceste numere sunt prime și au suma cifrelor, de asemenea, un număr prim. Pentru a face acest lucru, codul utilizează funcțiile &#039;&#039;&#039;is_prime&#039;&#039;&#039; și &#039;&#039;&#039;sum_digits&#039;&#039;&#039; pentru a verifica dacă un număr este prim și dacă suma cifrelor sale este, de asemenea, un număr prim. De asemenea, codul include o funcție &#039;&#039;&#039;validare_date&#039;&#039;&#039; care verifică dacă datele introduse de utilizator respectă restricțiile impuse. Dacă datele sunt valide, programul numără numerele prime din listă care au suma cifrelor, de asemenea, un număr prim și afișează rezultatul. În caz contrar, programul afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1345_-_K_Prim&amp;diff=3326</id>
		<title>1345 - K Prim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1345_-_K_Prim&amp;diff=3326"/>
		<updated>2023-04-09T19:16:10Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește un număr natural &#039;&#039;&#039;k&#039;&#039;&#039; și afișează cel mai mic număr natural &#039;&#039;&#039;n&#039;&#039;&#039; mai mare decât &#039;&#039;&#039;1&#039;&#039;&#039;, care nu este divizibil cu primele &#039;&#039;&#039;k&#039;&#039;&#039; numere prime și nu este prim.&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;kprim.in&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;k&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;kprim.out&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând cel mai mic număr natural &#039;&#039;&#039;n&#039;&#039;&#039;,care nu este divizibil cu primele &#039;&#039;&#039;k&#039;&#039;&#039; numere prime și nu este prim.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ k ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; &#039;&#039;&#039;kprim.in&#039;&#039;&#039;&lt;br /&gt;
: 3&lt;br /&gt;
;  &#039;&#039;&#039;kprim.out&#039;&#039;&#039;&lt;br /&gt;
: 49&lt;br /&gt;
== Explicație == &lt;br /&gt;
Primele &#039;&#039;&#039;3&#039;&#039;&#039; numere prime sunt &#039;&#039;&#039;2&#039;&#039;&#039;, &#039;&#039;&#039;3&#039;&#039;&#039;,&#039;&#039;&#039; 5&#039;&#039;&#039;.&lt;br /&gt;
Numerele care nu sunt divizibile cu &#039;&#039;&#039;2&#039;&#039;&#039;, &#039;&#039;&#039;3&#039;&#039;&#039; sau &#039;&#039;&#039;5&#039;&#039;&#039; sunt : &#039;&#039;&#039;7&#039;&#039;&#039;, &#039;&#039;&#039;11&#039;&#039;&#039;, &#039;&#039;&#039;13&#039;&#039;&#039;, &#039;&#039;&#039;17&#039;&#039;&#039;, &#039;&#039;&#039;19&#039;&#039;&#039;, &#039;&#039;&#039;23&#039;&#039;&#039;, &#039;&#039;&#039;31&#039;&#039;&#039;, &#039;&#039;&#039;37&#039;&#039;&#039;, &#039;&#039;&#039;41&#039;&#039;&#039;, &#039;&#039;&#039;47&#039;&#039;&#039;, &#039;&#039;&#039;49&#039;&#039;&#039;, …&lt;br /&gt;
&#039;&#039;&#039;49&#039;&#039;&#039; este cel mai mic număr care nu este prim&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validare_date(n):&lt;br /&gt;
    if isinstance(n, int) and n &amp;gt; 0:&lt;br /&gt;
        return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def prim(n):&lt;br /&gt;
    if n == 0 or n == 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if n == 2:&lt;br /&gt;
        return True&lt;br /&gt;
    if n % 2 == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(3, int(math.sqrt(n))+1, 2):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti un numar natural: &amp;quot;))&lt;br /&gt;
    if validare_date(n):&lt;br /&gt;
        if n == 1:&lt;br /&gt;
            print(9)&lt;br /&gt;
        else:&lt;br /&gt;
            x = 3&lt;br /&gt;
            while n &amp;gt; 0:&lt;br /&gt;
                if prim(x):&lt;br /&gt;
                    r = x&lt;br /&gt;
                    n -= 1&lt;br /&gt;
                x += 1&lt;br /&gt;
            p = r * r&lt;br /&gt;
            print(p)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;\nDatele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest program calculează pătratul celui de-al n-lea număr prim, unde &#039;&#039;&#039;n&#039;&#039;&#039; este un număr natural citit de la tastatură. Înainte de a începe calculele, programul verifică dacă datele de intrare sunt valide, adică dacă &#039;&#039;&#039;n&#039;&#039;&#039; este un număr natural pozitiv. Dacă datele sunt invalide, programul va afișa un mesaj corespunzător. Dacă datele sunt valide și &#039;&#039;&#039;n&#039;&#039;&#039; este egal cu 1, programul va afișa numărul 9. În caz contrar, programul va căuta cel de-al n-lea număr prim și va calcula pătratul acestuia, folosind o funcție care verifică dacă un număr dat este prim. Rezultatul este apoi afișat la ecran.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0405_-_Suma_Cifre_Nr_Prime&amp;diff=3324</id>
		<title>0405 - Suma Cifre Nr Prime</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0405_-_Suma_Cifre_Nr_Prime&amp;diff=3324"/>
		<updated>2023-04-09T19:08:59Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir cu &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați suma tuturor cifrelor numerelor prime din șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând suma tuturor cifrelor numerelor prime din șir.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 6&lt;br /&gt;
83 36 53 401 90 7&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 31&lt;br /&gt;
== Explicație == &lt;br /&gt;
Dintre cele &#039;&#039;&#039;6&#039;&#039;&#039; numere citite sunt prime : &#039;&#039;&#039;83&#039;&#039;&#039; &#039;&#039;&#039;53&#039;&#039;&#039; &#039;&#039;&#039;401&#039;&#039;&#039; &#039;&#039;&#039;7&#039;&#039;&#039;. Suma cifrelor acestor numere este &#039;&#039;&#039;31&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(n: int, a: list) -&amp;gt; bool:&lt;br /&gt;
    if not 1 &amp;lt;= n &amp;lt;= 1000:&lt;br /&gt;
        return False&lt;br /&gt;
    for x in a:&lt;br /&gt;
        if not 1 &amp;lt;= x &amp;lt;= 10**6:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def prim(n: int) -&amp;gt; int:&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    for i in range(1, int(n**0.5)+1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            cnt += 2&lt;br /&gt;
        if i*i == n:&lt;br /&gt;
            cnt -= 1&lt;br /&gt;
    if cnt == 2:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
def sum(n: int) -&amp;gt; int:&lt;br /&gt;
    s = 0&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        s += n % 10&lt;br /&gt;
        n //= 10&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    a = list(map(int, input().split()))&lt;br /&gt;
    if validare_date(n, a):&lt;br /&gt;
        s = 0&lt;br /&gt;
        for x in a:&lt;br /&gt;
            if prim(x):&lt;br /&gt;
                s += sum(x)&lt;br /&gt;
        print(s)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod conține trei funcții și un bloc de cod principal care folosește aceste funcții pentru a efectua o sarcină specifică:&lt;br /&gt;
&lt;br /&gt;
1.Funcția &#039;&#039;&#039;validare_date&#039;&#039;&#039; primește un număr întreg &#039;&#039;&#039;n&#039;&#039;&#039; și o listă de numere întregi &#039;&#039;&#039;a&#039;&#039;&#039; și returnează &#039;&#039;&#039;True&#039;&#039;&#039; dacă valorile sunt conforme cu anumite restricții și &#039;&#039;&#039;False&#039;&#039;&#039; în caz contrar. În acest caz, valorile valide pentru &#039;&#039;&#039;n&#039;&#039;&#039; sunt între 1 și 1000, iar valorile valide pentru fiecare element din lista &#039;&#039;&#039;a&#039;&#039;&#039; sunt între 1 și 10^6.&lt;br /&gt;
&lt;br /&gt;
2.Funcția &#039;&#039;&#039;prim&#039;&#039;&#039; primește un număr întreg &#039;&#039;&#039;n&#039;&#039;&#039; și returnează 1 dacă numărul este prim și 0 în caz contrar. În această funcție, se folosește o metodă de determinare a numărului de divizori ai lui &#039;&#039;&#039;n&#039;&#039;&#039;, și anume, se numără câți divizori există în intervalul [1, sqrt(n)]. Dacă numărul total de divizori este 2, atunci numărul este prim.&lt;br /&gt;
&lt;br /&gt;
3.Funcția &#039;&#039;&#039;sum&#039;&#039;&#039; primește un număr întreg &#039;&#039;&#039;n&#039;&#039;&#039; și returnează suma cifrelor acestuia. Această funcție extrage cifrele din numărul dat prin împărțirea repetată la 10 și adună cifra obținută la suma totală.&lt;br /&gt;
&lt;br /&gt;
4.Blocul de cod principal solicită introducerea numărului &#039;&#039;&#039;n&#039;&#039;&#039; și a listei &#039;&#039;&#039;a&#039;&#039;&#039;, validează datele introduse utilizând funcția &#039;&#039;&#039;validare_date&#039;&#039;&#039;, calculează suma cifrelor tuturor numerelor prime din lista &#039;&#039;&#039;a&#039;&#039;&#039; și o afișează. În cazul în care datele introduse nu sunt valide, se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0404_-_Cifre_Nr_Prime&amp;diff=3315</id>
		<title>0404 - Cifre Nr Prime</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0404_-_Cifre_Nr_Prime&amp;diff=3315"/>
		<updated>2023-04-09T18:40:35Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir cu &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinați numărul total de cifre al tuturor numerelor prime din șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
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.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând numărul total de cifre al tuturor numerelor prime din șir.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 6&lt;br /&gt;
83 36 53 401 90 7&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 8&lt;br /&gt;
== Explicație == &lt;br /&gt;
Dintre cele &#039;&#039;&#039;6&#039;&#039;&#039; numere citite sunt prime : &#039;&#039;&#039;83&#039;&#039;&#039; &#039;&#039;&#039;53&#039;&#039;&#039; &#039;&#039;&#039;401&#039;&#039;&#039; &#039;&#039;&#039;7&#039;&#039;&#039;. În total, ele au &#039;&#039;&#039;8&#039;&#039;&#039; cifre.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def prim(n):&lt;br /&gt;
    if n == 0 or n == 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if n == 2:&lt;br /&gt;
        return True&lt;br /&gt;
    if n % 2 == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(3, int(n**0.5) + 1, 2):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, a):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 10**5:&lt;br /&gt;
        return False&lt;br /&gt;
    if len(a) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    for x in a:&lt;br /&gt;
        if x &amp;lt; 1 or x &amp;gt; 10**9:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    a = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if not validare_date(n, a):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        nrcif = 0&lt;br /&gt;
        for x in a:&lt;br /&gt;
            if prim(x):&lt;br /&gt;
                while x != 0:&lt;br /&gt;
                    nrcif += 1&lt;br /&gt;
                    x //= 10&lt;br /&gt;
        print(nrcif)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acest cod verifică dacă un șir de numere îndeplinește anumite condiții și apoi calculează numărul de cifre prime din acele numere.&lt;br /&gt;
&lt;br /&gt;
Funcția &#039;&#039;&#039;prim&#039;&#039;&#039; primește un număr întreg și returnează adevărat dacă acesta este prim și fals în caz contrar. Algoritmul folosit parcurge toate numerele impare mai mici sau egale cu rădăcina pătrată a numărului dat și verifică dacă acestea sunt divizibile cu numărul dat.&lt;br /&gt;
&lt;br /&gt;
Funcția &#039;&#039;&#039;validare_date&#039;&#039;&#039; primește un număr întreg &#039;&#039;&#039;n&#039;&#039;&#039; și o listă &#039;&#039;&#039;a&#039;&#039;&#039; de &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi și verifică dacă acestea corespund cu anumite condiții: &#039;&#039;&#039;n&#039;&#039;&#039; trebuie să fie între 1 și 10^5, iar fiecare element din lista &#039;&#039;&#039;a&#039;&#039;&#039; trebuie să fie între 1 și 10^9.&lt;br /&gt;
&lt;br /&gt;
În blocul principal, programul citește un număr &#039;&#039;&#039;n&#039;&#039;&#039; și o listă de &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi &#039;&#039;&#039;a&#039;&#039;&#039;. Dacă datele de intrare nu respectă restricțiile impuse, programul afișează un mesaj de eroare. În caz contrar, programul calculează numărul de cifre prime din fiecare număr din lista &#039;&#039;&#039;a&#039;&#039;&#039;. Pentru fiecare număr, programul îl împarte la 10 până când ajunge la zero și numără cifrele prime găsite în procesul acesta. La final, programul afișează numărul total de cifre prime găsite în toate numerele din lista &#039;&#039;&#039;a&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0381_-_A_Prim_2&amp;diff=3141</id>
		<title>0381 - A Prim 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0381_-_A_Prim_2&amp;diff=3141"/>
		<updated>2023-04-09T06:06:53Z</updated>

		<summary type="html">&lt;p&gt;Paul Matei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citește un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; și apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Să se determine cel mai mare număr aproape prim dintre cele date, și de câte ori apare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, și apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numere &#039;&#039;&#039;M&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039;, separate prin exact un spațiu, reprezentând cel mai mare număr aproape prim dintre cele date și numărul său de apariții.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite sunt cuprinse între &#039;&#039;&#039;1 &#039;&#039;&#039;și &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 6&lt;br /&gt;
35 55 12 6 25 50&lt;br /&gt;
; Ieșire&lt;br /&gt;
: 55 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare_date(numar1, numar2):&lt;br /&gt;
    flag = False&lt;br /&gt;
&lt;br /&gt;
def is_prime(n):&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(n**0.5) + 1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def is_almost_prime(n):&lt;br /&gt;
    prime_factors = []&lt;br /&gt;
    for i in range(2, int(n**0.5) + 1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            if is_prime(i):&lt;br /&gt;
                prime_factors.append(i)&lt;br /&gt;
            if is_prime(n//i):&lt;br /&gt;
                prime_factors.append(n//i)&lt;br /&gt;
    if len(prime_factors) == 2 or (len(prime_factors) == 1 and prime_factors[0]**2 == n):&lt;br /&gt;
        return True&lt;br /&gt;
    if len(prime_factors) == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if len(prime_factors) &amp;gt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    if abs(prime_factors[0]*prime_factors[1] - n) &amp;lt;= 1:&lt;br /&gt;
        return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
n = int(input(&amp;quot;Introduceti numarul de numere: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
validare_date(n, 1_000_000_000)  # Validare date&lt;br /&gt;
&lt;br /&gt;
max_almost_prime = -1&lt;br /&gt;
count = 0&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    num = int(input(&amp;quot;Introduceti numarul: &amp;quot;))&lt;br /&gt;
    if is_almost_prime(num) and num &amp;gt; max_almost_prime:&lt;br /&gt;
        max_almost_prime = num&lt;br /&gt;
        count = 1&lt;br /&gt;
    elif num == max_almost_prime:&lt;br /&gt;
        count += 1&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Cel mai mare numar aproape prim este&amp;quot;, max_almost_prime, &amp;quot;si apare de&amp;quot;, count, &amp;quot;ori.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Acesta este un program Python care determină cel mai mare număr &#039;&#039;&#039;aproape prim&#039;&#039;&#039; introdus de utilizator și numărul de apariții ale acestuia. Funcția &#039;&#039;&#039;is_almost_prime(n)&#039;&#039;&#039; determină dacă un număr este &#039;&#039;&#039;aproape prim&#039;&#039;&#039;, adică are exact doi factori primi sau un singur factor prim dublu și niciun alt factor prim. Programul utilizează o &#039;&#039;&#039;funcție is_prime(n)&#039;&#039;&#039; care verifică dacă un număr este prim.&lt;/div&gt;</summary>
		<author><name>Paul Matei</name></author>
	</entry>
</feed>