쉿! 시대를 넘어 레온하르트 오일러, 피에르 드 페르마, 르네 데카르트 세 수학자가 은밀하게 모였습니다. 수학자가 아니라 낄 수 없었던 저, 홍아름 기자가 몰래 엿보고 왔는데요, 글쎄 ‘친화수’라는 걸 두고 소곤소곤 대며 얘기를 하고 있더라고요. 도원결의처럼 우정을 다지려고 모인 걸까
“만물의 근원은 수다.”
고대 그리스의 수학자 피타고라스와 그를 따르는 학파는 수에 신비한 성질이 있다고 믿고, 모든 것을 수로 설명하기 시작합니다. 곧 사람과 사물 등을 수로 따져보는 ‘수비학’이라는 학문이 시작되죠.
이 과정에서 특정한 성질을 갖는 수들을 발견했는데요, 그중 하나가 친화수입니다. 예를 들어 220의 약수는 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110, 220으로 자기 자신을 제외한 약수, 즉 진약수의 합은 284입니다. 한편 284의 약수는 1, 2, 4, 71, 142, 284로 진약수의 합은 220이죠. 이때 220의 진약수 합=d(220)=284, 284의 진약수 합=d(284)=220이 성립합니다.
피타고라스 학파는 이러한 성질을 보고 쌍을 이루는 220과 284를 ‘친한 사이’라고 봤습니다. 그러고는 그 둘에 친화수라는 이름을 붙이고 이를 적은 부적을 가지고 다니면 친구 사이의 우정이 보장된다고 믿었죠. 이 개념은 후대까지 전해지면서 유명한 수학자들이 친화수를 연구했습니다.
9세기경 아라비아의 수학자였던 사빗 이븐 쿠라는 친화수를 찾는 식을 만들었습니다. 이 식은 17세기 ‘페르마의 마지막 정리’로 유명한 프랑스 수학자 피에르 드 페르마와 르네 데카르트가 재발견해 친화수를 찾는 데 쓰죠. 레온하르트 오일러도 이 식으로 58쌍의 친화수를 더 찾아 총 61개의 친화쌍을 찾는 데 성공합니다. 이후 컴퓨터가 등장하면서 2020년 1월까지 약 12억 개의 친화쌍을 찾아내죠. 하지만 친화쌍의 개수가 무한개인지 유한개인지 아직 밝혀지지 않아 계속 연구하고 있습니다.
친화수 외에도 다양한 특징을 가진 수들이 고대 그리스부터 지금까지 연구되고 있습니다. 친화수와 비슷한 ‘완전수’는 고대 그리스의 수학자인 에우클레이데스(유클리드)가 제시한 것으로, 진약수의 합이 자기 자신과 같은 수를 말합니다. 6의 약수는 1, 2, 3, 6으로 6을 제외한 1, 2, 3의 합이 6과 같아 완전수지요. 이런 독특한 성질 때문에 많은 수학자가 완전수를 연구하고 있습니다.
오일러 프로젝트 21번 문제를 풀며 친화수를 찾아 의미를 부여했던 고대 그리스의 수학자들처럼 수를 진득하게 들여다보세요. 코딩으로 친화수 찾기, 도저언~!
● 파이썬 완전 정복! ‘약수 찾아 친화수 판별하기
21번 문제를 해결하는 데 필요한 파이썬 명령어입니다. 꿀팁 중의 꿀팁, 밑줄 쫙! 핵심만 소개하니 꼭 익혀두세요!
1. 자연수 n의 진약수의 합 구하기
두 수가 친화수인지 판별하기 위해 먼저 약수의 합을 구해야 합니다. n의 약수를 찾기 위해 n 이하의 자연수로 n을 일일이 나눠봐야 한다고 생각했나요? 60의 약수를 보면 2×30, 3×20처럼 모든 약수가 짝을 이뤄 나타난답니다. 따라서 모든 수를 나눠볼 것 없이 n 보다 작은 수로 n을 나눠보면 되죠. 그리고 n을 나눠떨어지게 하는 약수들을 모두 찾아 더하면 되는데요, 이 작업을 하는 함수 sum_factors(n)을 만듭니다. 이때 약수들의 합은 변수 s, 그리고 n을 나눌 n 과 작거나 같은 수를 변수 i로 둡니다.
2. 친화수 찾기
약수의 합을 구하는 함수 sum_factors(n)을 만들었으니, 이번엔 sum_factors(a)=b, sum_factors(b)=a가 성립하는 10000 이하의 친화수 a, b를 찾습니다. 여기서 주의할 점은 자기 자신과 진약수의 합이 같은 ‘완전수’를 제외해야 한다는 겁니다. 따라서 a와 b가 같은 완전수인지 확인하면서 친화수를 찾습니다.
● 도전! 오일러 프로젝트 21번 문제 뽀개기
앞서 익힌 파이썬 명령어를 이용해 수학 문제를 풀어봅시다. 오일러 프로젝트 문제는
코드를 잘만 짜면 1분 이내에 답을 얻을 수 있으니, 직접 한번 실행해보세요!
실제로 친화수는 소설 ‘박사가 사랑한 수식’에 등장한 것으로 유명합니다. 세상의 모든 것을 수로 따져 바라보던 박사는 주변 등장인물과 자신 사이에 친화수가 있어 인연이라고 생각하지요. 이번만큼은 코딩으로 문제를 푸는 것에서 그치지 않고, 잠깐 소설 속 박사가 되어 주변에서 친화수를 한번 찾아보는 건 어떨까요?