2568 - Cub Prim

From Bitnami MediaWiki

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

Cerința[edit | edit source]

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[edit | edit source]

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[edit | edit source]

Î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:[edit | edit source]

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[edit | edit source]

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[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> ​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) </syntaxhighlight>