eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

GCD vs. XOR

GCD vs. XOR

Оптимизация - это весело! Тем более, когда это совсем не обязательно.

Всем известно, что битовые операции (например, побитовое исключающее ИЛИ) выполняются быстрее, чем рекурсивные функции (такие как наибольший общий делитель, НОД). Чтобы произвести впечатление на руководителей стажировок, вы заменили в флагманском проекте компании все экземпляры gcd(x, y) гораздо более быстрыми xor(x, у).

Это было вчера, в пятницу. Теперь Вы начинаете думать, стоило ли вам тестировать новый код раньше развертывания в рабочей среде... Что ж, лучше поздно, чем никогда. В заданной последовательности чисел a1, ..., an определите, сколько пар (i, j) (1i < jn) удовлетворяют равенству gcd(ai, aj) = xor(ai, aj) . Напомним, что gcd(x, y) - наибольший общий делитель x и y, а xor(x , y) - операция побитового исключающего ИЛИ x и y.

Входные данные

Первая строка содержит количество тестов z (1z20). Далее следуют описания тестов.

Первая строка каждого теста содержит целое число n (1n2 000 000). Вторая строка содержит целые числа a1, a2, ..., an, все положительные и не превосходящие 106.

Суммарная длина всех последовательностей по всем тестам не превышает 3 * 107.

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество пар (ai, aj) таких что i < j, удовлетворяющих gcd(ai, aj) = xor(ai, aj).

Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
1
4
2 3 4 3
Вихідні дані #1
2
Джерело 2021 40th Petrozavodsk Programming Camp, Winter Day 1: Jagiellonian U Contest, Grand Prix of Krakow, January 29, Problem I