题目大意:给你n个数,问你有多少种可能使两个数加起来是2的幂次方
由于n的范围是1e5,暴力组合判断肯定会T,于是我们用map容器,记录的数出现的次数。
//https://blog.csdn.net/hesorchen
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a, b) memset(a, b, sizeof(a))
#define lowbit(a) (a & (-a))
#define mod 1000000007
#define endl "\n"
map<ll, ll> mp;
int main()
{
int n;
cin >> n;
ll ans = 0;
while (n--)
{
ll a;
cin >> a;
for (int i = 0; i < 33; i++)
ans += mp[(1 << i) - a];
mp[a]++;
}
cout << ans << endl;
return 0;
}