
object Main extends App {

  import scala.io.StdIn._
  import scala.math._

  val ballCount = readLine.trim.toInt
  val balls = readLine.trim.split(' ').map{_.toLong}.groupBy(n ⇒ n).toArray.map{case (num, arr) ⇒ new Ball(num, arr.length)}.sortBy(_.number)
  val exp = Array.tabulate(33){_ ⇒ 1L}
  for (i ← 1 until exp.length){
    exp(i) = exp(i - 1) * 2
  }
  var sum: Int = 0
  for (i ← balls.indices){
    for (e ← exp){
      if (e < balls(i).number * 2) lowerBound(balls, e - balls(i).number) match {
        case r if balls(r).number + balls(i).number == e && balls(r).count >= 1 ⇒
          val min = math.min(balls(r).count, balls(i).count)
          sum += min
          balls(r).count -= min
        case _ ⇒
      }else if (e == balls(i).number * 2 && balls(i).count >= 2) {
        sum += balls(i).count / 2
      }
    }
  }

  println(sum)
  def lowerBound(balls: Array[Ball], target: Long): Int = {
    var left = 0
    var right = balls.length - 1
    while (left < right){
      val mid = (left + right) / 2
      if (balls(mid).number < target){
        left = mid + 1
      }else {// target <= balls(mid).number
        right = mid
      }
    }
    right
  }
  def upperBound(balls: Array[Ball], target: Long): Int = {
    var left = 0
    var right = balls.length - 1
    while (left < right){
      val mid = (left + right) / 2
      if (balls(mid).number <= target){
        left = mid + 1
      }else {// target < balls(mid).number
        right = mid
      }
    }
    right
  }

  class Ball(val number: Long, var count: Int)
  implicit class Extenion[T](val value :T){
    def also(func: T ⇒ Unit): T = {
      func(value)
      value
    }
    def let[R](func: T ⇒ R): R = func(value)
  }
}