題目大意:給你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;
}