도구스학업·수학

제켄도르프 표현(피보나치 진법) 계산기

양의 정수를 이웃하지 않는 피보나치 수들의 합으로 나타냅니다. 표현이 하나뿐임을 전수 탐색으로 확인하고, 피보나치 부호와 마일→킬로미터 어림까지 함께 냅니다.

10³⁰까지 받습니다. 쉼표를 넣어도 됩니다

2,026의 제켄도르프 표현

1,597 + 377 + 34 + 13 + 5

피보나치 수 5개의 합이며, 이렇게 적는 방법은 하나뿐입니다

뽑힌 피보나치 수

수열에서 몇 번째피보나치 수빼고 남은 값
F161,597429
F1337752
F83418
F6135
F450

남은 값 이하의 가장 큰 피보나치 수를 계속 뺐습니다. 큰 것을 빼고 나면 남는 값이 반드시 그 바로 아래 피보나치 수보다 작아지므로, 이웃한 수가 뽑힐 수가 없습니다 — 이 한 문장이 정리의 증명이기도 합니다.

비트 표기 (낮은 자리부터)0001010100001001
피보나치 부호 (끝에 1을 덧붙임)00010101000010011
뽑은 수의 합이 원래 값인가같음
이웃한 피보나치 수가 없는가없음
전수 탐색으로 센 표현의 개수1가지
2,026마일을 한 칸 밀어 어림한 킬로미터3,278 km
정확한 환산 (×1.609344)3,260.531 km
어림의 오차0.536%
계산 근거2,026 = F16 + F13 + F8 + F6 + F4 = 1,597 + 377 + 34 + 13 + 5쓰는 수열: 1, 2, 3, 5, 8, 13, 21, … (맨 앞의 1을 한 번만 둡니다)1을 두 번 두면(1, 1, 2, 3, …) 4 = 3 + 1과 4 = 3 + 1처럼 같은 합이 두 가지로 세어져 유일성이 깨집니다.
모든 양의 정수는 이웃하지 않는 피보나치 수의 합으로 꼭 한 가지 방법으로 적힙니다. 1932년 반 데르 푸르텐이 처음 적었고 제켄도르프의 이름으로 알려졌습니다. 예를 들어 100은 89 + 8 + 3 하나뿐입니다. 100 = 89 + 8 + 2 + 1도 합은 맞지만 2와 1이 이웃한 피보나치 수라서 제켄도르프 표현이 아닙니다.
마일을 킬로미터로 바꾸는 셈법이 여기서 나옵니다. 이웃한 피보나치 수의 비가 황금비 1.618…로 다가가는데, 마일→킬로미터 환산값 1.609344가 그것과 거의 같습니다. 그래서 제켄도르프 표현의 피보나치 수를 한 칸씩 위로 밀면 그대로 어림이 됩니다. 8마일 ≈ 13km(실제 12.87), 89마일 ≈ 144km(실제 143.2)처럼 1% 안쪽으로 맞습니다.
그리디가 곧 정답입니다. 남은 값 이하의 가장 큰 피보나치 수를 계속 빼기만 하면 됩니다. 뒤에 더 좋은 조합이 있을까 걱정할 필요가 없는데, F(k)를 빼고 나면 남는 값이 반드시 F(k−1)보다 작아져 이웃이 뽑힐 수 없기 때문입니다. 동전 거스름돈 문제에서는 그리디가 최적이 아닌 경우가 있지만, 피보나치 수에서는 언제나 옳습니다.
피보나치 수열의 첫 1은 한 번만 씁니다. 흔히 쓰는 1, 1, 2, 3, 5…에서 1이 두 번 나오는데, 그대로 두면 4 = 3 + 1이 두 가지로 세어져 «꼭 한 가지»가 깨집니다. 그래서 제켄도르프 표현에서는 1, 2, 3, 5, 8…을 씁니다.

계산 방법

  1. 1양의 정수를 넣습니다. 10³⁰까지 받습니다.
  2. 2어떤 피보나치 수들이 뽑혔는지, 뺄 때마다 얼마가 남았는지 표에서 따라갑니다.
  3. 3비트 표기와 피보나치 부호를 확인합니다.
  4. 4«피보나치 부호 → 수»로 바꾸면 부호를 다시 읽어 볼 수 있습니다.

자주 묻는 질문

모든 양의 정수는 이웃하지 않는 피보나치 수들의 합으로 꼭 한 가지 방법으로 적힌다는 정리입니다. 예를 들어 100은 89 + 8 + 3 하나뿐입니다. 100 = 89 + 8 + 2 + 1도 합은 맞지만 2와 1이 이웃한 피보나치 수라서 제켄도르프 표현이 아닙니다.

남은 값 이하의 가장 큰 피보나치 수를 계속 빼기만 하면 됩니다(그리디). 뒤에 더 좋은 조합이 있을까 걱정할 필요가 없는데, F(k)를 빼고 나면 남는 값이 반드시 F(k−1)보다 작아져 이웃이 뽑힐 수 없기 때문입니다. 동전 거스름돈에서는 그리디가 최적이 아닌 경우가 있지만 피보나치 수에서는 언제나 옳습니다.

흔히 쓰는 1, 1, 2, 3, 5…에서 1을 두 번 두면 4 = 3 + 1이 두 가지로 세어져 «꼭 한 가지»가 깨지기 때문입니다. 그래서 제켄도르프 표현에서는 1, 2, 3, 5, 8, 13…을 씁니다.

제켄도르프 표현을 낮은 자리부터 비트로 적고 끝에 1을 덧붙인 것입니다. 이웃한 1이 없으므로 «11»이 나오는 곳이 곧 한 수의 끝이 되어, 길이를 따로 적지 않고도 이어 붙인 부호열을 다시 하나씩 가를 수 있습니다(접두 부호). 자료 압축에서 작은 정수를 담을 때 쓰며, 한 비트가 깨져도 다음 «11»에서 다시 맞춰지는 성질이 있습니다.

이웃한 피보나치 수의 비가 황금비 1.618…로 다가가는데, 마일을 킬로미터로 바꾸는 값 1.609344가 그것과 거의 같습니다. 그래서 제켄도르프 표현의 피보나치 수를 한 칸씩 위로 밀면 그대로 어림이 됩니다. 8마일 ≈ 13km(실제 12.87), 89마일 ≈ 144km(실제 143.2)처럼 대개 1% 안쪽으로 맞습니다.

이 계산기가 확인해 줍니다. 값이 7만 이하일 때는 피보나치 수의 모든 부분집합을 전수로 훑어 «이웃 없는 합»이 그 값이 되는 경우가 몇 가지인지 세고, 그 개수를 결과에 냅니다. 언제나 1이 나와야 합니다.

자리값이 1, 2, 4, 8이 아니라 1, 2, 3, 5, 8, 13입니다. 그리고 이진법과 달리 «이웃한 두 자리에 동시에 1이 올 수 없다»는 제약이 붙습니다. 그 제약 덕분에 표현이 유일해지고 접두 부호가 됩니다. 대신 같은 수를 적는 데 비트가 조금 더 듭니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 10³⁰까지 계산합니다. 내부는 BigInt이므로 자릿수가 커도 값이 어긋나지 않습니다.
  • 유일성 전수 확인은 7만 이하에서만 돌립니다. 그 위로는 부분집합이 너무 많아집니다.
  • 쓰는 피보나치 수열은 1, 2, 3, 5, 8…입니다. 맨 앞의 1을 두 번 두면 유일성이 깨집니다.
  • 마일→킬로미터 어림은 재미로 보는 것입니다. 정확한 값이 필요하면 1.609344를 곱하세요.
  • 음수와 0은 다루지 않습니다. 제켄도르프 정리는 양의 정수에 대한 것입니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.