#include #include using u64 = unsigned long long; using u32 = unsigned; using bs_t = std::array; bs_t B; void set(bs_t &B, u32 i){ B[i/64] |= 1ULL << (i%64); } void zeta(bs_t &B){ for(u32 i = 1; i < B.size(); i <<= 1){ for(u32 j = 0; j < B.size(); j++){ if(j & i){ B[j - i] |= B[j]; } } } for(u32 j = 0; j < B.size(); j++){ B[j] |= B[j] >> 32; B[j] |= (B[j] >> 16) & 0x0000FFFF0000FFFF; B[j] |= (B[j] >> 8) & 0x00FF00FF00FF00FF; B[j] |= (B[j] >> 4) & 0x0F0F0F0F0F0F0F0F; B[j] |= (B[j] >> 2) & 0x3333333333333333; B[j] |= (B[j] >> 1) & 0x5555555555555555; } } int main(){ u32 n; std::cin >> n; for(u32 i = 0; i < n; i++){ u32 a; std::cin >> a; set(B, a); } zeta(B); u64 ans = 0; for(u32 i = 0; i < B.size(); i++){ ans += __builtin_popcountll(B[i]); } std::cout << ans << std::endl; return 0; }