1931 - Fantastice
Cerinţa
Definim un număr ca fiind fantastic dacă numărul de numere la care acesta se împarte exact este un număr prim. Dându-se un șir cu numar_elemente numere întregi strict pozitive, să se afișeze numărul de numere fantastice din șir.
Date de intrare
Fișierul de intrare fantasticein.txt conține pe prima linie numărul numar_elemente de numere, iar pe cea de-a doua linie, separate prin câte un spaţiu, cele numar_elemente numere.
Date de ieșire
Fișierul de ieșire fantasticeout.txt va conține pe prima linie numărul de numere fantastice din șir. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund ceerintelor impuse.", iar daca indeplinesc cerintele enuntate se va afisa mesajul "Datele de intrare corespund cerintelor impuse."
Restricţii şi precizări
- 1 ⩽ numar_elemente ⩽ 1000000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu 1.000.000
Exemplul 1
- fantasticein.txt
6 21 19 25 16 27 729
- fantasticeout.txt
Datele de intrare corespund cerintelor impuse.
4
Explicatie
21 are divizorii 1, 3, 7, 21 19 are divizorii 1, 19 25 are divizorii 1, 5, 25 16 are divizorii 1, 2, 4, 8, 16 27 are divizorii 1, 3, 9, 27 729 are divizorii 1, 3, 9, 27, 81, 243, 729 Deci sunt 4 numere fantastice: 19 25 16 729
Exemplul 2
- fantastice.in
5 1000001 500000 700000 900000 1200000
- fantastice.out
Datele de intrare nu corespund cerintelor impuse.
Rezolvare
<syntaxhighlight lang="python" line> def este_prim(numar):
if numar < 2: return False for i in range(2, int(numar**0.5) + 1): if numar % i == 0: return False return True
def numere_fantastice(șir):
count_fantastice = 0
for numar in șir: if numar <= 0 or numar > 1000000: return -1 # Datele de intrare nu respectă condițiile
numar_divizori = 0 for i in range(1, numar + 1): if numar % i == 0: numar_divizori += 1
if este_prim(numar_divizori): count_fantastice += 1
return count_fantastice
def main():
# Citirea din fișierul de intrare try: with open("fantasticein.txt", "r") as file: numar_elemente = int(file.readline().strip()) numere = list(map(int, file.readline().split())) except FileNotFoundError: print("Fisierul de intrare nu exista.") return except ValueError: print("Datele de intrare nu corespund cerintelor impuse.") return
# Verificarea restricțiilor și calculul numărului de numere fantastice rezultat = numere_fantastice(numere)
# Scrierea în fișierul de ieșire sau afișarea mesajului de eroare with open("fantasticeout.txt", "w") as file: if rezultat == -1: file.write("Datele de intrare nu corespund cerintelor impuse.\n") else: file.write("Datele de intrare corespund cerintelor impuse.\n") file.write(str(rezultat) + "\n")
if __name__ == "__main__":
main()
</syntaxhighlight>