2239 - pow2

From Bitnami MediaWiki

Se consideră un șir a[1], a[2],…, a[n] de numere naturale nenule.

Cerinţa[edit | edit source]

Să se determine câte perechi de indici (i, j), 1 ⩽ i < j ⩽ n, există cu proprietatea că suma a[i] + a[j] este egală cu o putere a lui 2.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n numere naturale nenule, separate prin spații.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran un singur număr natural reprezentând numărul de perechi de indici distincți (i, j) cu proprietatea că suma a[i] + a[j] este egală cu o putere a lui 2.

Restricţii şi precizări[edit | edit source]

  • 2 ⩽ n ⩽ 100.000
  • 1 ⩽ a[i] ⩽ 1.000.000.000, pentru orice i = 1..n
  • Numerele care sunt puteri ale lui 2 sunt 1, 2, 4, 8, 16, 32, …

Exemplul 1[edit | edit source]

Intrare
4
3 5 3 13
Iesire
Datele de intrare corespund restrictiilor impuse
4

Exemplul 2[edit | edit source]

Intrare
210000
16 17 20 24 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def is_power_of_two(num):

   return (num != 0) and (num & (num-1) == 0)


num_elements = int(input().strip()) if not (2 <= num_elements <= 100000):

   print("Datele de intrare nu corespund restrictiilor impuse")
   exit(1)

a = sorted(list(map(int, input().split()))) if any(ai < 1 or ai > 1000000000 for ai in a):

   print("Datele de intrare nu corespund restrictiilor impuse")
   exit(1)

print("Datele de intrare corespund restrictiilor impuse")

count = 0 for i in range(num_elements):

   for j in range(i+1, num_elements):
       if is_power_of_two(a[i] + a[j]):
           count += 1

print(count) </syntaxhighlight>

Explicație[edit | edit source]

Cele patru perechi de indici sunt: (1,2), (1,4), (2,3), (3,4).