안녕하세요, 수학동아입니다!
이번 달도 새롭고 다양한 소식들로 가득찬 수학동아가 찾아왔습니다!
11월 호 내용이 궁금하시다고요?
살짝 미리보기로 오일러 프로젝트 기사를 소개해드릴게요~
이번 오일러 프로젝트에서는 오일러가 학생들에게 다양한 길이의 끈을 나눠줬어요.
그리고는 자연수 길이의 세 변을 가지는 직각삼각형, 즉 '피타고라스 삼각형'을 만들라고 했죠.
예를 들어 12cm의 끈이라면, 변의 길이가 각각 (3, 4, 5)인 직각삼각형을 만들 수 있어요.
피타고라스 정리인 a2+b2=c2에 대입해보면 32+42=25=52인 것으로 직각삼각형임을 알 수 있지요.
하지만 끈이 20cm인 경우라면 세 변이 자연수인 직각삼각형을 만들 수 없고,
120cm 끈으로는 (30, 40, 50), (20, 48, 52), (24, 45, 51)의 세 직각삼각형을 만들 수 있습니다.
이렇듯 이번에 도전할 오일러 프로젝트 75번 문제는 길이가 1,500,000 이하의 자연수인 끈으로
세 변이 정수인 직각삼각형을 만들 때, 오직 한 개의 피타고라스 삼각형을 만들 수 있는 끈의 길이를 찾는 거에요.
물론 피타고라스 정리 식의 a, b, c 자리에 자연수를 일일이 넣어보면서 찾을 수도 있지만,
'원시 피타고라스 삼조' 개념을 사용한 코딩으로 간단하게 문제의 답을 찾을 수 있어요.
사이냅소프트의 강중빈 상무님께 자세한 설명을 들어볼까요?
피타고라스 정리를 만족하는 자연수들이 서로소일때 이 세 수를 '원시 피타고라스 삼조'라고 하는데요, 유클리드가 아래 식으로 나타냈어요.
a=m2-n2, b=2mn, c=m2+n2
원시 피타고라스 삼조를 이루는 세 수의 배수들도 피타고라스의 정리를 만족하는데요, 따라서 모든 피타고라스 삼조는 원시 피타고라스 삼조의 배수로 나타낼 수 있어요. 위의 식에서 m과 n에 들어갈 수를 바꾸면 이 공식으로 모든 원시 피타고라스 삼조를 만들 수 있다는 거죠. 이를 이용하면 모든 수를 피타고라스 정리에 맞춰볼 필요없이 75번 문제의 답을 찾을 수 있어요.
먼저 원시 피타고라스 삼조 식에서 m과 n 중에서 n은 m 이하일 때까지만 늘려가면 돼요. 그렇다면 m은 얼마까지 늘려가야 할까요? 위의 식에서 둘레의 길이인 a+b+c를 구해 보면 2m2+2mn=2m(m+n)이고, 둘레의 최댓값이 150만이니까 m은 아무리 커도(n이 최솟값일 때) (750000)^(1/2)보다 작아야 해요.
지금까지 본 내용을 파이썬 코드로 나타내면 아래와 같아요. 이때 m과 n에 대한 조건이 만족하는지도 같이 검사해서, 아니면 continue 문을 써서 다음으로 넘어가도록 만들어요.
이렇게 구한 a, b, c는 서로소인 원시 피타고라스 삼조니까, 서로소가 아닌 다른 해답을 얻기 위해서는 합이 150만 이하일 때 까지 다시 여기에 정수배를 해줄 필요가 있어요. 특정한 둘레 길이에 대해 직각삼각형이 몇 개 만들어지는지 기록하려면 사전(dict) 자료형을 쓰면 되고요. 이번 문제는 코드가 비교적 짧은 편이니 한번 시도해보세요!
아래의 첨부파일에 오일러 프로젝트 75번 문제를 푸는 코드가 있으니, 한번 실행해보세요!
그럼 12월호 오일러 프로젝트도 많이 기대해주세요!
0 개의 댓글