<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3433_-_Forta</id>
	<title>3433 - Forta - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3433_-_Forta"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3433_-_Forta&amp;action=history"/>
	<updated>2026-05-01T12:09:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3433_-_Forta&amp;diff=7749&amp;oldid=prev</id>
		<title>Vasiliu Costel Andrei: Pagină nouă: == Enunț == Forța unui număr natural nenul X este egală cu numărul de divizori pozitivi ai lui X. De exemplu, numărul X = 10 are forţa 4, deoarece 10 are 4 divizori, mulțimea divizorilor fiind D10 = {1,2,5,10}.  == Cerința == Scrieţi un program care, cunoscând un șir de n numere naturale nenule, rezolvă următoarele cerințe:  1. determină cel mai mic număr din șir care are forța maximă; &lt;br&gt; 2. determină lungimea maximă a unei secvențe formată din numer...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3433_-_Forta&amp;diff=7749&amp;oldid=prev"/>
		<updated>2023-12-10T20:27:10Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunț == Forța unui număr natural nenul X este egală cu numărul de divizori pozitivi ai lui X. De exemplu, numărul X = 10 are forţa 4, deoarece 10 are 4 divizori, mulțimea divizorilor fiind D10 = {1,2,5,10}.  == Cerința == Scrieţi un program care, cunoscând un șir de n numere naturale nenule, rezolvă următoarele cerințe:  1. determină cel mai mic număr din șir care are forța maximă; &amp;lt;br&amp;gt; 2. determină lungimea maximă a unei secvențe formată din numer...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunț ==&lt;br /&gt;
Forța unui număr natural nenul X este egală cu numărul de divizori pozitivi ai lui X. De exemplu, numărul X = 10 are forţa 4, deoarece 10 are 4 divizori, mulțimea divizorilor fiind D10 = {1,2,5,10}.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care, cunoscând un șir de n numere naturale nenule, rezolvă următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
1. determină cel mai mic număr din șir care are forța maximă; &amp;lt;br&amp;gt;&lt;br /&gt;
2. determină lungimea maximă a unei secvențe formată din numere cu aceeași forţă ce poate fi obținută prin rearanjarea convenabilă a elementelor din șir.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare fortain.txt conține pe prima linie numărul c, care reprezintă cerința de rezolvat (1 sau 2), pe a doua linie un număr natural n, iar pe următoarea linie n numere naturale separate prin câte un spațiu, reprezentând elementele șirului.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire fortaout.txt va conține o singură linie pe care va fi scris un număr natural reprezentând răspunsul la cerința c.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; &amp;amp;les; 100.000&lt;br /&gt;
* 1 &amp;amp;les; &amp;#039;&amp;#039;&amp;#039;numere din sir&amp;#039;&amp;#039;&amp;#039; &amp;amp;les; 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
; fortain.txt&lt;br /&gt;
: 1&lt;br /&gt;
: 6&lt;br /&gt;
: 17 243 10 32 25 13&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare corespund restricțiilor impuse&lt;br /&gt;
; fortaout.txt&lt;br /&gt;
: 32&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Cerința este 1. D17={1,17}, D243={1,3,9,27,81,243}, D10={1,2,5,10}, D32={1,2,4,8,16,32}, D25={1,5,25}, D13={1,13}. Deci cea mai mare forță este 6, iar numărul minim cu această forță este 32.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
; fortain.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 8&lt;br /&gt;
: 121 10 14 25 49 9 25 15&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare corespund restricțiilor impuse&lt;br /&gt;
: 5&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Cerința este 2. O rearanjare a șirului ar putea fi (10 14 15)(121 25 49 9 25) astfel încât putem obține o secvență de lungime 3 de numere de forță 4 și o secvență de lungime 5 de numere de forță 3.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
; fortain.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 1000001&lt;br /&gt;
: 121 10 14 25 49 9 25 15&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare NU corespund restricțiilor impuse&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;
#3433 - Forta&lt;br /&gt;
&lt;br /&gt;
def valideaza_input(n, arr):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 100000:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse&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;
    for x in arr:&lt;br /&gt;
        if not (1 &amp;lt;= x &amp;lt;= 2000000000):&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;
def numar_divizori(x):&lt;br /&gt;
    count = 0&lt;br /&gt;
    for i in range(1, x + 1):&lt;br /&gt;
        if x % i == 0:&lt;br /&gt;
            count += 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def min_numar_cu_max_forta(arr):&lt;br /&gt;
    min_num = float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    max_forta = 0&lt;br /&gt;
&lt;br /&gt;
    for num in arr:&lt;br /&gt;
        forta = numar_divizori(num)&lt;br /&gt;
        if forta &amp;gt; max_forta or (forta == max_forta and num &amp;lt; min_num):&lt;br /&gt;
            max_forta = forta&lt;br /&gt;
            min_num = num&lt;br /&gt;
&lt;br /&gt;
    return min_num&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def lungime_maxima_secventa(arr):&lt;br /&gt;
    forta_counts = {}&lt;br /&gt;
    lungime_maxima = 0&lt;br /&gt;
&lt;br /&gt;
    for num in arr:&lt;br /&gt;
        forta = numar_divizori(num)&lt;br /&gt;
        if forta in forta_counts:&lt;br /&gt;
            forta_counts[forta] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            forta_counts[forta] = 1&lt;br /&gt;
&lt;br /&gt;
        lungime_maxima = max(lungime_maxima, forta_counts[forta])&lt;br /&gt;
&lt;br /&gt;
    return lungime_maxima&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolva_problema(c, n, arr):&lt;br /&gt;
    valideaza_input(n, arr)&lt;br /&gt;
    rezultat = 0&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        rezultat = min_numar_cu_max_forta(arr)&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        rezultat = lungime_maxima_secventa(arr)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Cerința c trebuie să fie 1 sau 2.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor din fișierul de intrare&lt;br /&gt;
with open(&amp;quot;fortain.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    c = int(file.readline().strip())&lt;br /&gt;
    n = int(file.readline().strip())&lt;br /&gt;
    arr = list(map(int, file.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
# Rezolvarea problemei&lt;br /&gt;
rezultat = rezolva_problema(c, n, arr)&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;fortaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vasiliu Costel Andrei</name></author>
	</entry>
</feed>