2568 - Cub Prim

De la Universitas MediaWiki

Definim prin număr cubprim, numărul natural obținut dintr-un număr prim la puterea a treia.

Cerința

Se dă un șir de N numere naturale oarecare . a) Să se afișeze M – numărul de numere cubprim. b) Să se afișeze pe următoarele M linii, descrescător după valoarea numărului cubprim de la cerința a), poziția pe care se află acest număr, numărul prim din care este format, precum și numărul cubprim astfel găsit.

Date de intrare

Fișierul de intrare cubprim.in conține pe prima linie numărul N, iar pe a doua linie N numere naturale separate prin spații.

Date de ieșire

În fișierul cubprim.out se afișează pe prima linie numărul de elemente găsite conform cerinței a).

Pe următoarele M linii se afișază elementele găsite, separate printr-un spațiu conform cerinței b).

Exemplu:

cubprim.in

10
5 23 8 7 32 121 27 14 64 8

cubprim.out

3
7 3 27
3 2 8
10 2 8

Explicație

a) Avem 3 numere care respectă cerința : 8, 27 și 8. Unde 8 este cubul lui 2 și 27 al lui 3. Se observă că în șir apare și 64 care este cubul lui 4 dar numărul 4 nu este prim.

b) Cubul cel mai mare format dintr-un număr prim este 27, poziția lui în șir este 7, urmat de numărul prim 3 care formează acest cub (3 * 3 * 3 = 27). Ultimele două linii sunt formate de numărul 8 găsit de două ori in șir, prima dată pe poziția 3 și apoi pe poziția 10.


Încărcare soluție

Lipește codul aici

a = [0] * 100005
b = [0] * 100005
c = [0] * 100005
d = [0] * 100005
n = int(input())
for i in range(1, n+1):
    a[i] = int(input())
for i in range(1, n+1):
    b[i] = int(input())
for i in range(1, n+1):
    c[i] = int(input())
cnt = 0
i = 1
j = 1
while i <= n and j <= n:
    if a[i] == b[j]:
        cnt += 1
        d[cnt] = a[i]
        i += 1
        j += 1
    elif a[i] < b[j]:
        i += 1
    else:
        j += 1
i = 1
j = 1
rez = -1
while i <= n and j <= cnt:
    if c[i] == d[j]:
        rez = c[i]
        break
    if c[i] < d[j]:
        i += 1
    else:
        j += 1
print(rez)