2198 – Elimin Prime

From Bitnami MediaWiki

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>