GCD와 XOR
시간 제한20초메모리 제한512 MB
값이 100만 이하인 원소 최대 200만 개짜리 배열에서 두 원소의 gcd와 XOR 결과가 같은 쌍의 개수를 구합니다.
문제
최적화는 즐겁다. 특히 꼭 필요하지 않을 때 더 즐겁다.
비트 연산(예: 비트별 XOR)이 재귀 함수(예: 최대공약수, GCD)보다 빠르다는 것은 모두가 안다. 인턴 지도 담당자에게 좋은 인상을 주려고, 회사 주력 프로젝트에 있던 모든 를 훨씬 빠른 로 바꿨다.
그 일은 어제 금요일에 있었다. 이제 새 코드를 운영 환경에 배포하기 전에 테스트했어야 했는지 고민하고 있다. 늦었지만 안 하는 것보다는 낫다. 수열 이 주어질 때, 실제로 를 만족하는 쌍 ()의 개수를 구하라. 여기서 는 와 의 최대공약수를, 는 와 의 비트별 XOR 연산 결과를 뜻한다.
입력
입력의 첫 줄에는 테스트 케이스의 개수 ()가 주어진다. 이어서 테스트 케이스가 차례로 주어진다.
각 테스트 케이스의 첫 줄에는 정수 ()이 주어진다. 둘째 줄에는 모두 양수이며 1,000,000을 넘지 않는 정수 이 주어진다.
모든 테스트 케이스의 수열 길이 합은 을 넘지 않는다.
출력
각 테스트 케이스마다 이고 를 만족하는 쌍 의 개수를 한 줄에 정수 하나로 출력한다.