思路:统计二进制上每一位上1出现的次数。然后异或,考虑每一位上0和1的组合次数,乘上这位的数值。
int a[65];
int main()
{
//freopen("in.txt", "r", stdin);
int n;
ll x;
while (cin >> n)
{
f(i, 1, n)
{
scanf("%lld", &x);
f(j, 0, 60)
{
if (x >> j & 1)a[j]++;
}
}
ll ans = 0;
f(i, 0, 60)
{
ans = (ans + (ll)a[i] * (n - a[i])%mod*quickmod(2, i, mod)%mod) % mod;
}
cout << ans << endl;
}
return 0;
}