1P by GN⁺ | ★ favorite | 댓글 1개
  • 인터넷 과일·이모지 수식 퍼즐의 변형을 정수 디오판토스 방정식으로 보고, 양의 정수 해를 만들기까지의 과정을 추적함
  • 핵심 도구는 정수 해를 곧장 찾는 대신 유리점을 먼저 찾고, 직선이나 접선으로 새 유리점을 생성하는 기하적 방법임
  • 변수 치환과 회전을 거친 방정식은 대칭적인 타원곡선이 되지만, 처음 보이는 쉬운 점들은 원래 문제의 양의 해로 바로 이어지지 않음
  • 타원곡선에서 두 유리점을 잇는 직선이나 한 점의 접선은 세 번째 교점을 만들고, Vieta 공식 덕분에 그 점도 유리점으로 남음
  • Mathematica로 덜 자명한 점을 찾고 연산을 반복한 끝에, 원래 변수로 되돌렸을 때 가능한 거대한 양의 정수 해를 구성함

인터넷 이모지 퍼즐이 수학 문제로 바뀐 과정

  • 인터넷에는 바나나 개수처럼 세부를 헷갈리게 해 서로 다른 답이 나오도록 만든 이모지 수식 퍼즐이 널리 퍼져 있었음
  • 2017년 초 r/math에는 Facebook식 과일 수학 퍼즐에 질렸다는 취지의 reddit thread가 올라왔고, 한 사용자가 과일 그림을 쓴 더 어려운 문제를 만들었음
  • Sridhar Ramesh가 그 문제를 약간 바꾸어 널리 퍼뜨리면서, 최소 해가 매우 길고 타원곡선 지식이 필요하다고 여겨지는 악명 높은 문제로 바뀜
  • 목표는 그 변형된 이모지 문제를 실제로 푸는 과정임

준비 예제: 피타고라스 삼중수와 유리점

  • 먼저 피타고라스 삼중수를 찾는 문제를 더 쉬운 예제로 다룸
  • 정수 해를 직접 찾기보다, 대응되는 단위원 위의 유리점을 찾는 문제로 바꾸면 구조가 단순해짐
  • 단위원 위의 한 유리점에서 출발해 유리수 기울기의 직선을 그으면, 원과 만나는 두 번째 점도 유리점이 됨
    • 직선과 원의 교점을 구하면 이차방정식이 나옴
    • 계수가 유리수이고 한 근이 이미 유리수이므로, Vieta 공식에 따라 다른 근도 유리수임
  • 반대로 단위원 위의 다른 유리점은 출발점과 잇는 직선의 기울기가 유리수이므로, 모든 유리점을 같은 방식으로 얻을 수 있음
  • 이 과정은 모든 피타고라스 삼중수를 양의 정수 두 개와 배수로 표현하는 표준 형태로 이어짐
  • 중요한 패턴은 직선으로 새 점을 얻는 방법이며, 원래 이모지 문제에서도 비슷한 아이디어가 쓰임

원래 방정식을 타원곡선으로 바꾸기

  • 이모지 문제의 방정식은 분모를 없앤 뒤, 정수 해 대신 변수 비율에 대한 유리점을 찾는 문제로 바뀜
  • 양의 정수 해만 곧장 찾지 않고, 양수와 음수를 포함한 유리점 전체를 먼저 탐색함
  • 그래프는 두 변수의 교환에 대해 변하지 않아 기울어진 대칭성을 가짐
  • 편의를 위해 변수 치환으로 그래프를 회전해 축에 대해 대칭인 형태로 만들었고, 이 곡선을 타원곡선이라고 부름
  • 그래프에서 눈으로 확인 가능한 쉬운 유리점들이 있지만, 원래 문제의 유효한 양의 해에는 대응하지 않음
  • 그래서 쉬운 점들을 출발점으로 삼아 더 많은 유리점을 만들어야 함

타원곡선에서도 작동하는 직선 트릭

  • 타원곡선 위의 두 유리점 (P), (Q)를 잇는 직선을 그으면, 그 직선은 곡선과 세 번째 점 (R)에서 만남
  • 이 세 번째 교점도 유리점이 됨
    • 직선 방정식을 타원곡선 방정식에 대입하면 한 변수에 대한 삼차방정식이 나옴
    • 삼차방정식의 계수는 유리수임
    • 이미 두 근은 (P), (Q)의 좌표에서 온 유리수이므로, Vieta 공식에 의해 세 번째 근도 유리수임
    • 직선 방정식에 다시 대입하면 나머지 좌표도 유리수로 정해짐
  • (P=Q)인 경우에는 두 점을 잇는 직선 대신 그 점에서의 접선을 쓰며, 교점은 중복도를 포함해 계산함
  • 처음 찾은 쉬운 점들을 연결하거나 접선을 그려도 몇몇 점만 반복되고, 새롭고 유용한 점으로 확장되지 않음
  • 이 점들은 torsion point라서 같은 직선 트릭을 반복해도 더 이상 새로운 점으로 탈출하지 못함

유효한 영역 안의 유리점 찾기

  • Mathematica로 타원곡선 위의 덜 자명한 유리점을 탐색했고, 그중 하나가 이후 계산에 사용됨
  • 목표는 임의의 유리점이 아니라, 원래 변수로 되돌렸을 때 세 값이 모두 양수가 되는 점을 찾는 것임
  • 모든 변수가 음수이면 부호를 모두 뒤집어 양의 해를 얻을 수 있으므로, 한 변수를 양수라고 두고 조건을 역추적함
  • 이 조건은 변환된 좌표평면의 특정 초록색 영역으로 나타나며, 타원곡선 위의 유리점을 그 영역 안으로 보내야 함
  • 손계산으로는 매우 번거로워 Mathematica로 직선·접선 연산에서 나오는 교점 좌표 공식을 계산함
  • 두 점을 잇는 직선의 세 번째 교점과 한 점에서의 접선이 만드는 세 번째 교점에 대해 좌표 공식이 만들어졌고, 식이 매우 복잡해지면서 숫자도 커짐

마지막 양의 정수 해 구성

  • 출발 유리점에서 접선을 그어 새 점을 얻고, 다시 그 점에서 접선을 그어 다음 점을 얻는 과정을 반복함
  • 몇 번의 접선 연산 뒤에도 목표 영역에 바로 들어가지 못해, 추가로 한 점의 좌표 부호를 바꾼 점과 연결해 또 다른 점을 만듦
  • 마지막에는 미리 남겨둔 “좋은” 유리점 하나와 앞서 얻은 큰 좌표의 점을 연결해, 마침내 목표 초록색 영역 안의 유리점에 도달함
  • 이 최종 유리점을 원래 변수들로 되돌리고, 분모의 최소공배수를 곱해 양의 정수 해를 구성함
  • 마지막 검산에서 구성된 거대한 정수 해가 원래 이모지 문제의 방정식을 만족함을 확인함

댓글과 토론

Hacker News 의견들
  • 이 문제에 대한 훌륭한 Quora 답변이 있음: https://www.quora.com/How-do-you-find-the-positive-integer-s...
    • 그 Quora 글은 Alon Amit이 썼고, 참고로 원문도 Alon Amit을 인용하니 그의 생각은 사후적 해설에 가까움
  • 관련해서, 어린 자녀들에게 수학을 가르치고 숙제를 도와줄 때 식으로 다시 쓰거나, 그 단계에 이르면 식 자체를 바꿔 쓰곤 했음
    다만 x 같은 것 대신 푹신한 구름, 별 같은 이름을 썼고, 아이들은 짜증 내면서도 흥미는 유지했으며 나중엔 친구들을 도울 때 똑같이 했다고 함
    이런 추상화를 처음 배울 때의 감각을 잊기 쉬운데, x가 특별한 게 아니라 해, 또는 “고양이 총마리 수” 같은 문구일 수도 있음을 보여주는 게 중요했음
    • 수학 문화에는 미니멀리즘이 있어서, 식을 던지고 섞을 때는 모든 걸 가능한 한 짧게 두는 게 도움이 된다는 점은 어느 정도 이해함
      하지만 나중에 출판되면 가독성이 정말 나빠짐. “이 식에서 큰 역할을 하는 항목이 있는데 대체 뭘 뜻하지? 누가 φ라고 붙여놔서 모르겠다” 같은 상황이 됨
      프로그래머가 이름 짓기를 못한다고 생각한다면 수학자들을 봐야 한다고 농담하곤 함. 수학자들은 이름을 못 짓는 능력에 이상한 자부심을 가짐
      최악은 수학 논문에서 바로 파생된 프로그램임. 변수에 상관계수가 들어 있다면 그렇게 부르면 됨. 아이디어를 나누기 위해 수천 년의 언어와 표지가 있는데, 그걸 암호화해서 rho라고 부르지 말라는 것
  • 이걸 ChatGPT에 줘 봤음. 기본 OpenAI 인터페이스에 이미지만 올렸고, 모델이 이미 문제를 알아서 정답을 내거나, 환각으로 답을 만들거나, 아예 문제 풀이를 거부할 거라고 예상했음
    그런데 실제로는 이렇게 됨: https://chatgpt.com/share/682cce62-c53c-8003-be2c-2929395868...
    요약하면 모델이 자신 있게 추측값을 내고, 계산해 보고, 틀렸다고 판단한 뒤 계속 다시 시도하며, 심지어 같은 추측을 반복함. 대칭성을 전혀 알아보지 못하고 완전히 구조 없는 행위자처럼 굴었음
    결국 이 퍼즐에는 해가 없다고 강하게 단정했는데, 앞으로의 퍼즐에서도 모델이 이렇게 나쁘게 동작한다면 내 믿음을 수정해야겠음
  • “Sridhar Ramesh라는 사람”이라니, Sridhar는 팔로우할 만한 고수임. 수학 박사이면서 동시에 똥글에도 박사급인 사람은 흔치 않음
  • 이런 장르를 정말 좋아함. 직접 “Dantzig Sniping”이라고 부르기 시작했고, 내가 만든 것도 하나 있음: https://x.com/TheOisinMoran/status/1298305686082744320
    더 많은 맥락과 관련 사례는 여기 있음: https://x.com/TheOisinMoran/status/1299124512240398336
    • Gdańsk, 즉 Danzig에서 따온 이름인 줄 알고 거기서 뭐가 저격당했는지 궁금했음
    • 이런 성질을 가진 문제는 어떻게 발견하는지 궁금함
  • 2025년인데 왜 작성자는 변수 이름에 실제 과일 이모지를 쓰지 않는 걸까?
    • 복잡한 C 코드베이스를 이해하려고 할 때 기존 변수를 이모지로 바꾸면 도움이 되는 경우가 많았음
      어느 변수가 어디서 쓰이는지 추적하기 훨씬 쉽고, 코드의 순수한 구조를 한눈에 받아들이기 좋아짐. 예전에 올린 예시는 여기 있음: https://imgur.com/F27ZNfk
      안타깝게도 Rust와 JS 같은 현대 언어 대부분은 XID_Start/XID_Continue 권고를 따르는데, 개인적으로 동기가 그리 탄탄해 보이지 않고 모든 이모지 문자를 식별자에서 제외함
    • Gemini가 만든 C# 풀이인데, 과일 이모지 변수를 써서 문제를 풀었음. 아마 무차별 대입인 듯함: https://imgur.com/a/cC5QPH0
    • 올해는 2025년이지만, 그 언어가 만들어진 해는 아마 2025년이 아닐 것임
  • 4 대신 다른 상수를 쓰면 가장 작은 해가 정말 거대한 수가 될 수 있음: https://observablehq.com/@robinhouston/a-remarkable-diophant...
    • 1억 2천만 자리짜리 숫자를 작은 textarea 안에서 필요할 때 불러오는 멍청하지만 장엄한 방식이 정말 마음에 듦
  • 그 문제가 처음 나왔을 때가 기억남. 정수론 세미나에서 다 같이 크게 웃었음
  • 정수론의 깊은 곳과 이상한 그래프까지 파고드는 건 좋지만, 원래 사과/바나나 퍼즐에서 대체 뭐가 까다롭거나 헷갈리도록 의도된 건지 모르겠음
    사람들이 싸우게 만들 만큼 쉽게 헷갈리는 부분이 있는 건가, 아니면 모두가 서둘러 잘난 척하게 만들 만큼 쉬운 문제인 건가?
    나는 10, 4, 2가 나왔는데, 어쩌면 내가 헷갈린 걸 수도 있음
    • “트릭”은 마지막 묶음에는 바나나가 3개뿐이고 다른 묶음에는 4개가 있다는 것임. 마찬가지로 마지막 식에는 코코넛이 하나만 있음
      그래서 1 + 10 + 3으로 해석할 수 있어 보임