2198 – Elimin Prime
Se consideră un șir de n numere întregi, cu n număr natural nenul. Se elimină primul element din șir și toate elementele șirului aflate pe poziții care reprezintă numere prime, în ordinea crescătoare a pozițiilor. Operația de eliminare se repetă cu elementele rămase în șir, repoziționate după eliminarea celorlalte, până când este eliminat și ultimul element rămas.
Cerinţa[edit | edit source]
Să se scrie un program care afișează elementele șirului inițial, în ordinea în care au fost eliminate conform algoritmului descris mai sus.
Date de intrare[edit | edit source]
Fișierul de intrare elimin_primein.txt conține pe prima linie numărul n, iar pe a doua linie n numere întregi separate prin spații.
Date de ieșire[edit | edit source]
Fișierul de ieșire elimin_primeout.txt va conține pe prima linie, separate prin spațiu, numerele din fișierul de intrare în ordinea eliminării acestora.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n ⩽ 100.000
- numerele de pe a doua linie a fișierului de intrare sun cuprinse în intervalul [-1.000.000.000, 1.000.000.000]
- elementele șirului sunt indexate de la 1 la n.
Exemplul 1[edit | edit source]
- elimin_primein.txt
10 1 2 3 4 5 6 7 8 9 10
- elimin_primeout.txt
Datele de intrare corespund restrictiilor impuse 1 2 3 5 7 4 6 8 10 9
Exemplu 2[edit | edit source]
- elimin_primein.txt
100001 1 2 3 4 5 6 7 8 9 10 ... 1000001
- elimin_primeout.txt
Datele de intrare nu corespund restrictiilor impuse
Atentie![edit | edit source]
Programele vor folosi doar instrucțiunile de bază ale limbajului de programare ales, inclusiv cele de intrare/ieșire, dar nu și alte funcții din biblioteci specializate (algorithm, string,…).
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def main():
with open('elimin_primein.txt', 'r') as fin, open('elimin_primeout.txt', 'w') as fout: n = int(fin.readline().strip()) if n < 1 or n > 100000: fout.write("Datele de intrare nu corespund restrictiilor impuse\n") return numbers = list(map(int, fin.readline().strip().split())) if any(x < -1000000000 or x > 1000000000 for x in numbers): fout.write("Datele de intrare nu corespund restrictiilor impuse\n") return fout.write("Datele de intrare corespund restrictiilor impuse\n")
if __name__ == "__main__":
main()
</syntaxhighlight>