import sys

readline = sys.stdin.readline



# 残った数の中で最大の数とペアになれる（可能性のある）数は一意に決まる。

# 15に15以下の数を足して作れる2べきは16だけ、32は作れない。

# 8 * 2 < 15 * 2 < 16 * 2だから。

# 大きいほうから見ていって、ペアになれる数を特定出来たらペアにする。

# 以下を別々で持つ

# ・大きい順の管理

# ・探している数へのO(1)での到達と、残数管理（同じ数が複数回出てくる可能性があるため）



N = int(readline())

A = list(map(int,readline().split()))



from collections import defaultdict



balls_count = defaultdict(int) # 個数の管理



import heapq as hq

balls_q = [] # ボールを大きい順に入れていく



for a in A:

  balls_count[a] += 1

  hq.heappush(balls_q, -a)



def get_pair_num(x): # xとペアになれる数を探す

  tar = 2

  while tar < x:

    tar *= 2

  if tar == x:

    return tar

  return tar - x



ans = 0

while balls_q:

  ball = -(hq.heappop(balls_q))

  if balls_count[ball] == 0: # すでに使用済みのボールである

    continue

  # 取り出した時点で、このあとペアにするか破棄するかのどちらかである。

  # 同じボールを取り出すことのないよう、この時点で1引いておく

  balls_count[ball] -= 1

  pair = get_pair_num(ball)

  if balls_count[pair] > 0:

    ans += 1

    balls_count[pair] -= 1

  # pushしないからheapqでなくてよかったな・・・



print(ans)
import sys

readline = sys.stdin.readline



# 残った数の中で最大の数とペアになれる（可能性のある）数は一意に決まる。

# 15に15以下の数を足して作れる2べきは16だけ、32は作れない。

# 8 * 2 < 15 * 2 < 16 * 2だから。

# 大きいほうから見ていって、ペアになれる数を特定出来たらペアにする。

# 以下を別々で持つ

# ・大きい順の管理

# ・探している数へのO(1)での到達と、残数管理（同じ数が複数回出てくる可能性があるため）



N = int(readline())

A = list(map(int,readline().split()))



from collections import defaultdict



balls_count = defaultdict(int) # 個数の管理



for a in A:

  balls_count[a] += 1



A = sorted(A, reverse = True)



def get_pair_num(x): # xとペアになれる数を探す

  tar = 2

  while tar < x:

    tar *= 2

  if tar == x:

    return tar

  return tar - x



ans = 0

for ball in A:

  if balls_count[ball] == 0: # すでに使用済みのボールである

    continue

  # 取り出した時点で、このあとペアにするか破棄するかのどちらかである。

  # 同じボールを取り出すことのないよう、この時点で1引いておく

  balls_count[ball] -= 1

  pair = get_pair_num(ball)

  if balls_count[pair] > 0:

    ans += 1

    balls_count[pair] -= 1



print(ans)
import sys

readline = sys.stdin.readline
# 残った数の中で最大の数とペアになれる（可能性のある）数は一意に決まる。
# 15に15以下の数を足して作れる2べきは16だけ、32は作れない。
# 8 * 2 < 15 * 2 < 16 * 2だから。
# 大きいほうから見ていって、ペアになれる数を特定出来たらペアにする。
# 以下を別々で持つ
# ・大きい順の管理
# ・探している数へのO(1)での到達と、残数管理（同じ数が複数回出てくる可能性があるため）
N = int(readline())
A = list(map(int, readline().split()))
from collections import defaultdict

balls_count = defaultdict(int)  # 個数の管理
import heapq as hq

balls_q = []  # ボールを大きい順に入れていく
for a in A:
    balls_count[a] += 1
    hq.heappush(balls_q, -a)


def get_pair_num(x):  # xとペアになれる数を探す
    tar = 2
    while tar < x:
        tar *= 2
    if tar == x:
        return tar
    return tar - x


ans = 0
while balls_q:
    ball = -(hq.heappop(balls_q))
    if balls_count[ball] == 0:  # すでに使用済みのボールである
        continue
    # 取り出した時点で、このあとペアにするか破棄するかのどちらかである。
    # 同じボールを取り出すことのないよう、この時点で1引いておく
    balls_count[ball] -= 1
    pair = get_pair_num(ball)
    if balls_count[pair] > 0:
        ans += 1
        balls_count[pair] -= 1
    # pushしないからheapqでなくてよかったな・・・
print(ans)

import sys

readline = sys.stdin.readline
# 残った数の中で最大の数とペアになれる（可能性のある）数は一意に決まる。
# 15に15以下の数を足して作れる2べきは16だけ、32は作れない。
# 8 * 2 < 15 * 2 < 16 * 2だから。
# 大きいほうから見ていって、ペアになれる数を特定出来たらペアにする。
# 以下を別々で持つ
# ・大きい順の管理
# ・探している数へのO(1)での到達と、残数管理（同じ数が複数回出てくる可能性があるため）
N = int(readline())
A = list(map(int, readline().split()))
from collections import defaultdict

balls_count = defaultdict(int)  # 個数の管理
for a in A:
    balls_count[a] += 1
A = sorted(A, reverse=True)


def get_pair_num(x):  # xとペアになれる数を探す
    tar = 2
    while tar < x:
        tar *= 2
    if tar == x:
        return tar
    return tar - x


ans = 0
for ball in A:
    if balls_count[ball] == 0:  # すでに使用済みのボールである
        continue
    # 取り出した時点で、このあとペアにするか破棄するかのどちらかである。
    # 同じボールを取り出すことのないよう、この時点で1引いておく
    balls_count[ball] -= 1
    pair = get_pair_num(ball)
    if balls_count[pair] > 0:
        ans += 1
        balls_count[pair] -= 1
print(ans)

-import heapq as hq - -balls_q = []  # ボールを大きい順に入れていく -    hq.heappush(balls_q, -a) +A = sorted(A, reverse=True) -while balls_q: -    ball = -(hq.heappop(balls_q)) +for ball in A: -    # pushしないからheapqでなくてよかったな・・・