#D0017. 和为2的幂

和为2的幂

题目描述

给定一个长度为 nn 的数列 a1,a2,,ana_1, a_2, \ldots, a_n。求:存在多少对下标对 (i,j)(i, j) 同时满足如下两个条件:

  1. 1i<jn1 \le i \lt j \le n
  2. ai+aja_i + a_j22 的幂(即存在一个整数 xx 满足 ai+aj=2xa_i + a_j = 2^x

输入格式

第一行,一个整数 n(1n105)n(1 \le n \le 10^5)

第二行,nn 个整数 a1,a2,,an(1ai109)a_1, a_2, \ldots, a_n(1 \le a_i \le 10^9),两两之间以一个空格分隔。

输出格式

输出一个整数,表示满足条件(i<ji \lt jai+aja_i + a_j22 的幂)的下标对 (i,j)(i, j) 的数量。

input1

4
7 3 2 1

output1

2

input2

3
1 1 1

output2

3

说明/提示

样例解释

样例1:有 22 对满足条件的下标对:(1,4)(1, 4)(2,4)(2, 4)
样例2:有 33 对满足条件的下标对:(1,2)(1, 2)(1,3)(1, 3)(2,3)(2, 3)

数据规模与约定

  • 对于 30%30\% 的数据,n10,ai100n \le 10, a_i \le 100
  • 对于 60%60\% 的数据,n1000,ai106n \le 1000, a_i \le 10^6
  • 对于 100%100\% 的数据,1n105,1ai1091 \le n \le 10^5, 1 \le a_i \le 10^9