2024 - Divizor 112: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinta == Se dă un şir format din n numere naturale nenule. Aflaţi cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir. == Date de intrare == Fișierul de intrare divizor112.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule separate prin spații. == Date de iesire == Fișierul de ieșire divizor112.txt va conține pe prima linie cel mai mic număr natural, diferit de 1, care divide un număr m...
 
No edit summary
Line 1: Line 1:
== Cerinta ==
== Cerinta ==


Se dă un şir format din n numere naturale nenule. Aflaţi cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.
Se dă un şir format din '''n''' numere naturale nenule. Aflaţi cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.


== Date de intrare ==
== Date de intrare ==


Fișierul de intrare divizor112.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule separate prin spații.
Fișierul de intrare '''divizor112in.txt''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale nenule separate prin spații.


== Date de iesire ==
== Date de iesire ==


Fișierul de ieșire divizor112.txt va conține pe prima linie cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.
Fișierul de ieșire '''divizor112out.txt''' va conține pe prima linie cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.


== Restrictii si precizari ==
== Restrictii si precizari ==


*1 n 100.000
*1 ⩽ n ⩽ 100.000
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000


== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;divizor112in.txt
:5
:5
:1 2 3 4 5
:1 2 3 4 5


;Iesire
;divizor112out.txt
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
:2
:2


== Exemplul 2 ==
== Exemplul 2 ==
;Intrare
;divizor112in.txt
:-4
:-4
:1000001 64 -89 43580
:1000001 64 -89 43580
;Iesire
;divizor112out.txt
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse





Revision as of 11:22, 27 December 2023

Cerinta

Se dă un şir format din n numere naturale nenule. Aflaţi cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.

Date de intrare

Fișierul de intrare divizor112in.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule separate prin spații.

Date de iesire

Fișierul de ieșire divizor112out.txt va conține pe prima linie cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.

Restrictii si precizari

  • 1 ⩽ n ⩽ 100.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000

Exemplul 1

divizor112in.txt
5
1 2 3 4 5
divizor112out.txt
Datele introduse corespund restrictiilor impuse
2

Exemplul 2

divizor112in.txt
-4
1000001 64 -89 43580
divizor112out.txt
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def divizor_maxim(n, numere):

   # Inițializează un dicționar pentru a număra de câte ori apare fiecare divizor
   frecventa_divizori = {}
   # Parcurge fiecare număr din șir
   for numar in numere:
       # Calculează divizorii numărului
       divizori = [i for i in range(2, numar + 1) if numar % i == 0]
       # Actualizează frecvența divizorilor în dicționar
       for divizor in divizori:
           if divizor in frecventa_divizori:
               frecventa_divizori[divizor] += 1
           else:
               frecventa_divizori[divizor] = 1
   # Găsește divizorul cu cea mai mare frecvență
   divizor_maxim = max(frecventa_divizori, key=frecventa_divizori.get)
   return divizor_maxim

def main():

   # Deschide fișierul de intrare
   with open("divizor112.txt", "r") as f_in:
       n = int(f_in.readline())
       numere = list(map(int, f_in.readline().split()))
   # Calculează divizorul cu cea mai mare frecvență
   rezultat = divizor_maxim(n, numere)
   # Deschide fișierul de ieșire
   with open("divizor112.txt", "w") as f_out:
       # Scrie rezultatul în fișierul de ieșire
       f_out.write(str(rezultat) + "\n")

if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie

2 divide două numere din şir.