이건 문제 이해는 쉽지만
풀기는 어려운 문제 중 하나
여기서 조건은 양의 정수에 해당하는 답을 찾는거임
과일은 마이너스 개수가 있다고 말 못하닌까 양의 정수임
이 문제를 풀기 위해 중요한건 단순화, 일반화, 일관성, 등등
간단하면서도 일관적인 답이 나온다는 것을 증명하면서 나아가야됨
시작
일단 쟤는 변수 치환에 대한 불변성에 대해 동차로 볼 수 있음
일반적인 동차식은 = 0 인데 그건 아니고
a, b, c 에 대해서 어떤 상수를 곱한다 해도 서로 상쇄됨
(a, b, c) 에 임의의 상수 5를 곱해서
(5a, 5b, 5c) 를 대입해봤는데 원상복귀한거 보이지? 서로 상쇄된다는 거임
결론적으로 a, b, c에 뭐를 곱해도
답은 딱 잘 나올 수 있다는 걸 증명한 셈이라 좀 더 풀기 수월해짐
그렇다면 이제 a , b , c 의 완전 정확한 답을 구할 필요가 없어짐
왜?
뭐가 나와도 걍 아무거나 곱하면 답이 나오닌까
답에 대해 미련을 안가져도 된다는 거지
이제 우리는 a , b , c 비율에 초점을
맞춰야됨
그럼 비율만 맞춘다면 a, b, c 3개 중 하나의 값을 고정시켜도 상관없음
그럼 c=1 로 고정시킨다 생각하고 c에다가 1 을 대입함
c=1 대입
이후 분수 형태로 있으면 계산할 때 꼴받으닌까 분수를 없앰
분수를 없애기 위해 분모를 모두 곱한 것 (a+b)(b+1)(a+1) 을 양변에 곱함
곱하면 이래됨
a^3+b^3-3(a^2b+ab^2+b^2+a+b+a^2)-5ab+1=0
이 식에서 a , b 값을 일단 구함
a에 0을 넣어보면
(a , b) = ( 0 , -1 ) 에 대해 접선의 방정식 풀이를 사용하여 접선을 구해봄
저걸 점 하나의 값과 식 하나로 구할 수 있음
a^3+b^3-3(a^2b+ab^2+b^2+a+b+a^2)-5ab+1=0
아까 봤던 이 식
a로 미분하고
b로 미분한 후
접선의 방정식 공식에 대입하면
b = 1/6 a - 1 이 나옴
정리하면 a = 6 (b+1)
근데 이걸 그대로
a^3+b^3-3(a^2b+ab^2+b^2+a+b+a^2)-5ab+1=0
이 식에 대입해도 제대로 된 답이 안나옴
여기서 1번 엎어야됨
우린 지금 잘못된 길로 나아갔음
방식은 맞을뻔 했는데 뭔가 틀림
다른 방식으로 식을 단순화 시켜야됨
일단 이 식에서 c=1 을 안넣고 분모를 없애봄
양변에 (a+b)(a+c)(b+c) 를 곱하면
이렇게 나오고
여기서 c 에 0을 넣어봄
그럼 a , b , c 는 각각 -1, 1 , 0 이 됨
(a , b , c) = ( -1, 1 , 0)
이건 ㅈㄴ 중요함
왜냐면 3차방정식에서 유리수에 해당하는 정답이 나왔기 때문임
이건 단순화를 시키기 위해 사용할 Elliptic curve (타원 곡선) 을 사용하기 위해서 중요함
타원 곡선이 될 수 있는 조건 하나인 3차 방정식에서 유리수에 해당하는 답이 나온다면
그 3차방정식이 타원 곡선일 확률이 높다는 점 때문임 , 얘가 타원곡선이 아닐수도 있지만 일단 해보는거임
여기서 Elliptic curve (타원 곡선) 이란
이렇게 생긴 그래프인데
타원형이 아닌데 왜 타원곡선이라 부르는가?
이건 elliptic integral (타원적분)에서 유래 되었기 때문임
여기서 elliptic integral (타원적분) 이란
해당 과정을 구할 때 루트 ( f(x) ) 의 함수를 적분하는데, 최종적으로
근데 이 모양이 저 그래프를 나타내기 때문에 타원 곡선이라 부른다고 함
타원곡선은 타원하고 거진 관계없다는 소리
아무튼
이건 Weierstrass form (바이어슈트라스 형태) 라고 부르는 데
저 두 식은 여러 바이어슈트라스 형태 중 타원 곡선에 해당하는 식임
이 단순화 변환 과정은 그냥 미친듯이 노가다성이 높아서 계산기 써야됨
몇시간동안 하다가 도중에 미친짓인거 판단하고 포기함
얼추 코딩기술 써서 맞춰보면
해당 형태가 나옴
쟤를 그래프에 그려보면
좌우 차이는 x 축을 좀 늘린거 차이라 똑같은 애들임 , 오른쪽이 이해하기 쉬움
저기서 a , b , c 도 정의내려보면
단순화는 끝났음
이제 저 그래프에 해당하는 x , y 값을 구하면 a , b , c 를 구할 수 있음
x , y 값을 구하기 전에
우린 타원곡선의 특성에 대해 좀 더 알아야됨
일단 타원곡선은 복소 다양체로써 이해될수도있음
간단히 말하면, 아주 작은 부분(국소적으로)을 확대해서 보면 복소평면과 닮은 공간이라는 의미
여기서 핵심은 타원 곡선이 복소 토러스와 같다는 점임
(여기서 복소수란 실수와 허수를 결합한 수임)
(여기서 복소평면이란 복소수를 기하학적으로 표현하는 2차평면임)
(여기서 토러스란 도넛과 같은 형태임)
여기서 복소 토러스 C/L 을 사용하는데 , 이는 복소평면 C를 격자 L로 나눈 공간임
C/L 은 복소 평면의 각 점을 격자에 따라 같은 위치에 있는 점을 동일시 하는 것을 의미함
그러닌까 격자 L 에 포함되는 점이 있다면 복소 토러스 C/L 에서 같은 점으로 간주할 수 있음
------------
격자 L 은 복소수 w1 , w2 라는 선형 독립적인 복소수에 의해 생성됨
선형 독립은 복소수 w1 , w2 가 실수상에서 선형독립인 것을 말하는데 a * w1 + b * w2 = 0 를 만족하는 a, b는 오직 a=b=0 밖에 없다는 것을 의미함
또한 w1 과 w2 는 복소평면 상에서 평행하지 않는 두 벡터(방향)로 나타내는데
이 두 벡터로 만들어진 평행사변형이 복소평면을 가득 채우는 거임
같은 점으로 간주한다는 건 평행사변형 중 하나를 기본영역이라 선택하고 z라는 점이 기본영역 밖에 벗어나 있다면
z 를 적절한 격자벡터 (a * w1 + b * w2) 를 사용하여 영역 안으로 옮기면 되기 때문에
이렇게 이동된 점은 원래의 z 와 C/L에서 같은점으로 간주한다는 것
------------
이런 특성을 사용해서 타원곡선에서는 점들의 덧셈을 할 수 있게 됨
최종적으론
점 z1 + 점 z2 = 점 z3 라는 간단한 공식을 사용하기 위해 저러한 특성에 대해 알고있어야 됨
이 관점을 통해 타원곡선의 덧셈을 기하학적으로 할 수 있도록 직관적인 이해를 가능하게 해줌
요약하면 점의 값을 사용하여 새로운 점의 값을 구할 수 있다는 거임
이제 저 특성을 사용하여
타원 곡선의 점에 대한 덧셈을 해도 된다는 것을 알게됨
즉, P1 + P2 = (P1 + P2) 가 될 수 있다는 소리임
아니면 점 1개로 P + P = 2P 가 될 수 있음
해당 논리를 그림으로 표현한거임
P1 과 P2 에 해당하는 직선을 그어서 반대쪽 그래프에 만나는 점을 찾은 후 x 축 대칭이동을 하면됨
x 축 대칭이동을 하는 이유는 위에 설명되었던 점들의 덧셈연산을 위해서
상당한 수학적인 논리가 반영된 결과임 , x축 대칭이동을 안하면 점들의 덧셈이 잘 성립이 안되기 때문
부가적인 이유로는 점들의 다양성과 일관성을 위해서임
만약 x 축 대칭이동을 안하고 위에 있는 점을 기준으로 다시 다른 새로운 점을 구할 수 없거나 잘 안됨
그러니 x 축 대칭이동을 통해 다양성을 확보하고 일관적으로 답이 계속 나올 수 있게 해주는 장치같은거임
아까 점 1개로 P + P = 2P가 될 수 있다고 했는데
점 1개에 해당하는 접선의 방정식을 구한 후 그래프와 만나는 점을 찾고 그 점을 x 축 대칭이동 하면 됨
예시로 저 식은 P = (x , y) = (-100 , 260) 에 만족함
그럼 P + P = 2P 를 해보면 2P = (8836/25 , -950716/125) 가 나옴
새롭게 구한 x , y 값을 다시 a , b , c 에 대입해본다면 (a , b , c ) = ( 9499, -8784 , 5165) 가 나옴 이건 양의정수가 아니니 다시해야됨
P + P = 2P P + 2P = 3P .,....... 이런식으로 반복하면서 a b c 를 구한 후 양의정수인지 확인하면 답이나옴
3P , 4P 도 계속하면 딱 9P 에서
9P=(-66202368404229585264842409883878874707453676645038225/13514400292716288512070907945002943352692578000406921
,58800835157308083307376751727347181330085672850296730351871748713307988700611210/1571068668597978434556364707291896268838086945430031322196754390420280407346469)
이 나왔고
이걸로 a b c 를 구하면
a=154476802108746166441951315019919837485664325669565431700026634898253202035277999,
b=36875131794129999827197811565225474825492979968971970996283137471637224634055579,
c=4373612677928697257861252602371390152816537558161613618621437993378423467772036
가 나옴
이게 정답일까?
ㅇㅇ 정답임
계산기 성능이 쓰레기라 소수점 버린거 아닐까?
결론
a b c 는 80자리가 넘는 값이 나온다
여기서 가장 중요한 점은
여기까지 읽은 시점에서 이과는 이해완료됐다는 점임
근데 종이에 쓴게 아까운데 c = 1로는 정답을 풀 수 없는걸까?
일단 아까 하던 방식대로 식을 전개함
이후 단순화를 위해 몇가지 항을 추가하면서 단순화를 시킴
이후
x = a + b + 1
z = ab
로 치환후 정리를 조짐
여기서 a 와 b에 대한 근의 방정식을 구할 수 있는데
a + b 와 ab 에 대한 식을 알 수 있기 때문에
a + b = x - 1
ab = z
이걸 사용해서
t^2 - (a+b)t + ab = 0 꼴로 만들어 버릴 수 있음
이를 다시 x 와 z 로 표현한다면
t^2 - (x-1)t + z = 0
해당 식에 근의 공식을 적용해보면
가 됨
a b 가 유리수가 되기 위해선 (x-1)^2 - 4z 는 어떤 유리수의 제곱이 되어야됨
즉, 양의 유리수가 되어야 된다는 것
그럼 z 도 정리됐으니
(x-1)^2 - 4z 이 식에 z 를 대입함
분모쪽은 이미 제곱이라서 볼 필요가 없음
이제 분자쪽이 양의 유리수가 되어야됨
결국
이런식의 정리를 할 수 있음
여기서 중요한건
이 식
아까 봤던 타원곡선 식이랑 유사함
유리수를 구해보면
(x,y)=(−3,10),(−1,0),(0,7),(1,2) 등 여러개가 나옴
그럼 얘를 4차 타원곡선이라 생각하고 푸는데
3차랑 다르게 풀어야됨
아까는 2개의 점으로 교점인 점을 찾았지만
이번엔 3개의 점으로 그래프를 만들어서 교점인 점을 찾아야됨
아무튼 얘도 어째저째 풀어보면 답이 나옴
이제 해결법을 알았으니 결과물에 집중해봄
문제의 조건을 바꿔보자
1
저 식에서 4 대신 6을 넣으면 답이 어떻게 될까?
a = 2250324022012683866886426461942494811141200084921223218461967377588564477616220767789632257358521952443049813799712386367623925971447 b = 20260869859883222379931520298326390700152988332214525711323500132179943287700005601210288797153868533207131302477269470450828233936557 c =
1218343242702905855792264237868803223073090298310121297526752830558323845503910071851999217959704024280699759290559009162035102974023
4 대신 홀수를 넣는다면 답은 안나온다는건 증명됨
2
저 식에서 음수가 1개 있다면 답이 어떻게 될까?
a = 11
b = -1
c = 4
3
저 식에서 음수가 2개 있다면 답이 어떻게 될까?
a = 1
b = -4
c = -11
4
낮은 숫자 중 저 식에 가까운 숫자는 뭘까?
a = 2361292
b = 126021
c = 503025
(133987937743,14237891832,21356837748)
-> 3.99999999999999999999999813
(8630104736050,400069681308,1900330986213)
-> 4.000000000000000000000253
(6870194050563369, 342641871163678, 1488094815890035)
-> 3.9999999999999999999999965987
5
더 나아가면 어떻게 될까?
시작점을 (-100 , -260) 시작시 9P에서 이전 정답이 나왔고
13P
a = 184386514670723295219914666691038096275031765336404340516686430257803895506237580602582859039981257570380161221662398153794290821569045182385603418867509209632768359835 b = 16666476865438449865846131095313531540647604679654766832109616387367203990642764342248100534807579493874453954854925352739900051220936419971671875594417036870073291371 c = 32343421153825592353880655285224263330451946573450847101645239147091638517651250940206853612606768544181415355352136077327300271806129063833025389772729796460799697289
17P
a = 9391500403903773267688655787670246245493629218171544262747638036518222364768797479813561509116827252710188014736501391120827705790025300419608858224262849244058466770043809014864245428958116544162335497194996709759345801074510016208346248254582570123358164225821298549533282498545808644 b = 1440354387400113353318275132419054375891245413681864837390427511212805748408072838847944629793120889446685643108530381465382074956451566809039119353657601240377236701038904980199109550001860607309184336719930229935342817546146083848277758428344831968440238907935894338978800768226766379 c = 1054210182683112310528012408530531909717229064191793536540847847817849001214642792626066010344383473173101972948978951703027097154519698536728956323881063669558925110120619283730835864056709609662983759100063333396875182094245046315497525532634764115913236450532733839386139526489824351
21P
a = 5054729227475450427274369484803239479825091305751388135572448603576037654978196142209886225943055713384230446118035969818320833964792478425568165426513861388534926491015921716410969570164048517748147506388402603496289958758089911825477669004739864966841494437579004665357462952425413032747439063553786897871988705969714829772337356641778138923838273632046383016843421820241871452675269925797080859944523086015293719539167125415529515145 b = 1161640217306132458900911441651415023972393417197892812143262449233898803422146346627825401856073449291322173894322476243337457486170427505800629028080349908170091219751869674513518143111011120403910142953219728784138582766210837461563508481437266175417187186208008663435889653439706655448626378444301314102088643599567233932299749952837694062004500119197352724794576882305675018438398927991642460037666142140173983786350444307965016411 c = 23327978912047254535804038142169556127186936756095181398136756224463368530351921955206357565424226029748329737767516130520072674084336131550259761622497092797922739666348144750601917346229515778478878142030504652018159936616800590064485753155232061032607622109441379545719754978549786027663601160534574317253280344812956727894696796553762212813889660906595671851622444601557714326712873901193569743490902166958363537983235022557869209259
사실상 답은 무한개임
요약
1 저 문제는 이해는 쉽지만 풀기는 어려운 문제임
2 단순화 , 일관성 , 일반화 등 이것저것해서 쉬운형태로 만든 다음 컴퓨터로 그래프에 해당하는 수많은 점을 찾으면 답이나옴
3 인간의 손으로는 거의 못푼다고 보는데 풀이를 풀어쓰면 이과도 이해할 수 있음 (문과도 이해되게 글쓰려 했는데 그건 안될듯)
4 풀이보면 이해는 가능하지만, 풀이없이 그냥 푼다는건 정말 95% 이상이 못푸는게 맞음
미로찾기 같은 느낌이라 길 잘못들면 첨부터 다시해야되고, 제대로 된 길을 잘 찾아야 정답이 나오는 수준이라 너무 어려움
이과라면 천천히 읽으면 쉽게 이해됨