본문바로가기
[오일러 프로젝트] 수학왕 찐천재: 이상한 방법으로 약분할 수 있는 분수를 찾아라!
수학동아 2021.04.27 10:53 조회 545

코.알.못 홍 기자의 코딩 도전기

코딩(프로그래밍)의 ‘코’자도 모르는 코.알.못. 홍 기자가 수학 문제를 코딩으로 푸는 오일러 프로젝트 문제를 하나하나 해결해 나갑니다. 오일러 프로젝트는 수학과 코딩 실력을 모두 키울 수 있도록 2001년에 만든 수학 문제 웹사이트입니다. 홍 기자와 함께한다면 수학과 코딩 언어의 하나인 파이썬 모두 정복할 수 있지 않을까요?

 

 

공부하려고 봤다가 배꼽이 빠진다는 마약 강의! 웃으려고 봤다가 알짜배기 지식 얻어간다는 일타 예능!

웹예능 ‘공부왕 찐천재’에서는 수학은 물론 국어, 사회 등의 달인들이 나와 ‘뇌순녀’ 홍진경을 가르쳐줍니다.

하지만 3/4에 4를 곱하면 왜 3이 되는지 이해하지 못하는데요.

그를 위해 분수의 패러다임을 바꿀 새로운 분수를 소개합니다. 일명 ‘이상한 분수’!

 

 

<오일러 프로젝트 33번>

약분은 분모와 분자를 그 둘의 공약수로 나누는 것을 말합니다. 예를 들어 분수 49/98를 약분한다면 둘의 공약수인 7 또는 49로 나눠 49/98=7/14=1/2이 돼야 합니다.

그럼 약분의 개념을 잘 모르는 사람이 분모, 분자의 공통된 숫자 9를 지우는 방식으로 '이상한 약분’을 한다면 답이 어떻게 될까요? 놀랍게도 49/98=4/8=1/2로 1/2과 같은 값이 나옵니다. 그렇다면 분수의 값이 1보다 작고 분자와 분모가 두 자리 정수인 ‘이상한 분수’들을 찾아봅시다!

 

여러분도 공부왕 찐천재 홍진경처럼 수학 개념을 배우다 이해하기 어려웠던 순간이 있었나요? 만약 오일러 프로젝트 33번 문제에 등장한 '이상한 분수'들로만 문제를 푼다면 얼마나 좋을까요. 분자, 분모를 소인수 분해해 약수를 찾아 약분할 필요도 없고요. 그럼 분수의 값이 1보다 작고 분자, 분모가 두 자리 정수인 이상한 분수들을 더 찾아볼까요? 49/98처럼 분자, 분모에 있는 공통된 숫자를 지울 수 있는 분수는 크게 네 가지 경우가 있어요.

 

 

식을 정리하면 모순이 되는 cx/cy, xc/yc 외에 cx/yc, xc/cy 꼴의 이상한 분수를 찾아봅시다!

 

 

파이썬 완전정복! ‘이상하고도 이상한 분수 찾기’

33번 문제를 해결하는 데 필요한 파이썬 명령어입니다.

꿀팁 중의 꿀팁, 밑줄 쫙! 핵심만 소개하니 꼭 익혀두세요!

 

1. 분수의 분자, 분모에서 십의 자릿수와 일의 자릿수 골라내기

두 자리 수에서 십의 자릿수와 일의 자릿수를 얻으려면 어떻게 해야 할까요? 10으로 수를 나눠 몫과 나머지를 구하면 됩니다. 몫은 십의 자릿수, 나머지는 일의 자릿수가 되지요. 파이썬에는 이 방식을 이용해 몫과 나머지를 한 번에 구하는 명령어가 있습니다. ‘divmod’ 함수입니다. divmod 함수는 두 개의 숫자로 이뤄진 순서쌍을 되돌려주는데, divmod(나눌 수, 나누는 수)를 입력하면 (몫, 나머지), 즉 (십의 자릿수, 일의 자릿수)가 나옵니다.

 

 

2. 이상하게 약분되는 분수 찾기

어떤 분수가 n/d의 꼴이라고 합시다. 분자 n의 십의 자릿수는 n1, 일의 자릿수는 n2, 분모 d의 십의 자릿수와 일의 자릿수는 각각 d1, d2입니다. 즉 divmod(n, 10) = (n1, n2)이고 divmod(d, 10) = (d1, d2)입니다.

그다음 if문을 이용해 이때의 분수들이 ‘이상한 분수’가 되는 cx/yc, xc/cy를 만족해야 한다는 조건을 만듭니다. cx/yc의 경우 분자의 십의 자릿수와 분모의 일의 자릿수가 같아야 하므로 n1=d2여야 하고, xc/cy는 분자의 일의 자릿수와 분모의 십의 자릿수가 같아야 하므로 n2=d1을 만족해야 합니다.

 

 

위의 두 가지 조건 중 하나를 만족하는 분수를 찾는 함수 cancel(n, d)를 만듭니다.

 

 

 

도전! 오일러 프로젝트 33번 문제 뽀개기

* 코딩 언어는 Python으로 두고 실행하세요!

 

 

 

#1 몫과 나머지를 구할 divmod 명령어를 불러오기 위해 math 모듈을 실행합니다.

#2, 3, 4, 5, 6, 7 n/d꼴의 분수가 ‘이상한 분수’인지 아닌지 알아보는 함수 cancel(n, d)를 만듭니다.

#8 분자가 두 자리 정수여야 하므로 분자인 num의 값을 10부터 98까지로 지정합니다. 분자가 99일 때는 분모의 최댓값인 99와 같아 분수의 값이 1 이상이 되므로 제외합니다. 수의 범위는 range(시작 숫자, 끝 숫자+1)꼴로 작성합니다.

#9 분모 역시 두 자리 정수여야 하고, 분수가 1보다 작기 위해서는 분모가 분자보다 항상 커야 하므로 분모 den의 범위를 num+1부터 99까지로 정합니다.

#10 분수 num/den를 이상하게 약분한 값이 num/den의 값과 같다면 그 분수의 값을 출력합니다.

 

 

Bonus 오일러 퀴즈

오일러 프로젝트 33번 문제를 풀어보고, 다음 예제 문제에도 도전해보세요!

 

1. 분수의 값이 1보다 크면서 분자, 분모가 두 자리 정수인 ‘이상한 분수’는 가능할까? 가능하다면 하나만 구하고, 가능하지 않다면 그 이유를 생각해보자.

 

2. cx/yc, xc/cy 꼴의 분수는 아래 식을 정리하면 ‘이상한 분수’를 만족하는 조건을 더 찾을 수 있다. 어떤 조건이 있을지 찾아보자.

 

 

 

혹시 수학 문제를 풀다가 ‘이상한 분수’처럼 기존의 수학 법칙이 필요 없는 문제를 본 적이 있나요?

댓글로 제보해주시면 코딩으로 그 이유를 낱낱이 파헤쳐드릴게요! (찡긋)

 

첫 댓글의 주인공이 되어 보세요!
  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911