2198 – Elimin Prime: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: 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 == Să se scrie un program care afișează elementele șirului inițial, în...)
 
Fără descriere a modificării
Linia 16: Linia 16:
  1 2 3 4 5 6 7 8 9 10
  1 2 3 4 5 6 7 8 9 10
; elimin_primeout.txt
; elimin_primeout.txt
Datele de intrare corespund restrictiilor impuse
  1 2 3 5 7 4 6 8 10 9
  1 2 3 5 7 4 6 8 10 9


== Exemplu 2 ==
== Exemplu 2 ==
; elimin_primein.txt
; elimin_primein.txt
  20
  100001
  4 23 16 -7 89 115 23 11 15 2 -8 -9 21 0 75 23 32 -1 4 5
  2 3 4 5 6 7 8 9 10 4 23 16 -7 89 115 23 11 15 2 -8 -9 21 0 75 23 32 -1 4 5 ...
; elimin_primeout.txt
; elimin_primeout.txt
  4 23 16 89 23 -8 21 32 4 -7 115 11 2 0 5 15 -9 75 -1 23
  Datele de intrare nu corespund restrictiilor impuse


== Atentie! ==
== Atentie! ==

Versiunea de la data 2 ianuarie 2024 21:38

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

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

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

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

  • 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

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

elimin_primein.txt
100001 
2 3 4 5 6 7 8 9 10 4 23 16 -7 89 115 23 11 15 2 -8 -9 21 0 75 23 32 -1 4 5 ...
elimin_primeout.txt
Datele de intrare nu corespund restrictiilor impuse

Atentie!

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

def este_prim(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    p = 3
    while p * p <= n:
        if n % p == 0:
            return False
        p += 2
    return True


def main():
    sir = list(map(int, input().split()))

    if len(sir) > 100000:
        print("Datele de intrare nu corespund restrictiilor impuse")
        return

    eliminat = []

    while sir:
        eliminat.append(sir.pop(0))
        i = 1
        while i < len(sir):
            if este_prim(i+1):
                eliminat.append(sir.pop(i))
            else:
                i += 1

    print("Datele de intrare corespund restrictiilor impuse")
    print(' '.join(map(str, eliminat)))


if __name__ == "__main__":
    main()