eolymp
bolt
Try our new interface for solving problems
Məsələlər

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).

Zaman məhdudiyyəti 1 saniyə
Yaddaşı istafadə məhdudiyyəti 128 MiB
Giriş verilənləri #1
1
4
2 3 4 3
Çıxış verilənləri #1
2
Mənbə 2021 40th Petrozavodsk Programming Camp, Winter Day 1: Jagiellonian U Contest, Grand Prix of Krakow, January 29, Problem I