2024 - Divizor 112
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.