XOR 선형 기저 계산기
수 여러 개에서 부분집합 XOR로 만들 수 있는 값들의 기저를 구합니다. 2ⁿ개의 부분집합을 세지 않고도 최대 XOR·k번째 값·특정 값을 만들 수 있는지를 알 수 있고, 넣어 가는 과정을 단계별로 보여 줍니다.
공백이나 쉼표로 구분합니다. 0 이상의 정수만 봅니다(60개까지).
부분집합 XOR로 만들 수 있는 값
32가지
수 5개에서 부분집합은 32가지지만, 서로 다른 XOR 값은 2^5 = 32가지뿐입니다. 같은 값을 만드는 부분집합이 각각 1가지씩 있습니다.
0부터 31까지 넣을 수 있습니다.
기저 (최고 비트가 서로 다릅니다)
| 최고 비트 | 값 | 2진법 | 기약 사다리꼴 |
|---|---|---|---|
| 5 | 41 | 101001 | 100001 |
| 4 | 22 | 010110 | 010001 |
| 3 | 13 | 001101 | 001000 |
| 2 | 7 | 000111 | 000101 |
| 1 | 2 | 000010 | 000010 |
기약 사다리꼴은 각 원소의 최고 비트가 다른 원소에는 나타나지 않게 정리한 것입니다. k번째 값을 구하려면 이 꼴이라야 합니다 — 그러지 않으면 순서가 어긋납니다.
하나씩 넣어 가는 과정
| 넣은 값 | 2진법 | 줄여 간 자취 | 결과 |
|---|---|---|---|
| 13 | 001101 | — | 3번 비트에 꽂음 |
| 22 | 010110 | — | 4번 비트에 꽂음 |
| 41 | 101001 | — | 5번 비트에 꽂음 |
| 7 | 000111 | — | 2번 비트에 꽂음 |
| 30 | 011110 | 8 → 5 → 2 | 1번 비트에 꽂음 |
끝까지 0이 된 값(진하게 표시)은 앞의 것들로 이미 만들 수 있어 기저에 들어가지 않습니다. 그런 값이 하나라도 있으면 비어 있지 않은 부분집합으로 0을 만들 수 있다는 뜻이기도 합니다.
사용 방법
- 1수를 공백이나 쉼표로 구분해 넣습니다.
- 2기저 크기와 만들 수 있는 값의 개수(2^기저크기)를 확인합니다.
- 3최대 XOR과 0이 아닌 최솟값을 봅니다.
- 4만들고 싶은 값을 넣어 가능한지 판정합니다.
- 5단계 표에서 어떤 수가 「이미 만들 수 있음」으로 걸러지는지 봅니다.
자주 묻는 질문
수들의 비트열을 GF(2) 위의 벡터로 보았을 때의 기저입니다. XOR이 덧셈인 두 원소짜리 체에서는 「부분집합 XOR」이 곧 선형결합이므로, 만들 수 있는 값 전체가 벡터공간이 됩니다. 기저 크기가 k면 만들 수 있는 서로 다른 값이 정확히 2^k개입니다.
기저 원소들의 최고 비트가 서로 다르기 때문입니다. 높은 비트부터 「켤 수 있으면 켠다」로 진행하면 되는데, 어떤 비트를 켜는 선택이 그보다 낮은 비트에만 영향을 주고 이진법에서는 한 자릿수가 그 아래 전부를 합친 것보다 크기 때문입니다. 뒤에서 후회할 일이 생기지 않습니다.
언제나 0입니다. 아무것도 고르지 않으면 XOR이 0이기 때문입니다. 뜻이 있는 물음은 「0이 아닌 최솟값」이고, 그것은 기약 사다리꼴 기저에서 최고 비트가 가장 낮은 원소입니다. 어떤 조합이든 최고 비트는 고른 것들 중 가장 높은 최고 비트가 되므로 하나만 고르는 쪽이 이깁니다.
기저로 차례로 지워 나가 0이 되면 만들 수 있습니다. 목표의 최고 비트를 가진 기저가 있으면 XOR로 지우고, 다음 비트로 넘어가는 것을 되풀이합니다. 끝까지 무언가 남으면 그 비트는 이 수들로 결코 만들 수 없는 부분입니다.
기저를 기약 사다리꼴로 정리한 뒤 k의 이진 표현을 「어느 기저를 쓸지」로 읽으면 됩니다. 각 기저 원소의 최고 비트가 다른 원소에는 나타나지 않게 정리해야 순서가 맞습니다. 이 정리를 건너뛰면 값은 다 나오지만 크기 순서가 어긋납니다.
2^(n − 기저크기)가지씩입니다. 어떤 수가 앞의 것들로 만들어져 기저에 들어가지 못했다면, 그것으로 0을 만드는 부분집합이 생기고 거기에 대칭차를 취해도 XOR 값이 그대로이기 때문입니다. n개에서 기저가 k개면 「XOR이 0이 되는 부분집합」이 정확히 2^(n−k)개 있습니다.
경진 프로그래밍에서 「부분집합 XOR의 최댓값」, 「어떤 값을 만들 수 있는가」, 「XOR이 0이 되는 부분집합 세기」 같은 문제에 표준으로 쓰입니다. 선형대수의 도구가 정수 비트에 그대로 옮겨진다는 것을 보여 주는 좋은 예이기도 하며, 오류정정부호(해밍 코드 등)의 생성행렬도 같은 언어로 설명됩니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.
알아두면 좋은 점
- 32비트 부호 없는 정수 범위만 다룹니다. 더 큰 수는 BigInt로 같은 알고리즘을 쓰면 됩니다.
- 음수와 소수점은 걸러 냅니다. 비트 연산이 뜻을 가지려면 0 이상의 정수라야 합니다.
- 단계 표를 보이기 위해 60개까지만 받습니다. 알고리즘 자체는 개수 제한이 없습니다.
- 「만들 수 있는 값의 개수」는 0을 포함합니다. 아무것도 고르지 않는 경우가 언제나 있기 때문입니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.