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

НОД против XOR

НОД против 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 Петрозаводск, Зима День 1: Jagiellonian U Contest, Гран При Кракова, Январь 29, Задача I