본문바로가기
[오일러 프로젝트] 강철부대: 1000 이하의 d 중에서 가장 긴 순환마디를 갖는 1/d는?
수학동아 2021.06.01 12:05 조회 378

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

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

 

 

6일 현충일과 25일 한국전쟁, 29일 제2연평해전을 기리는 6월은 호국·보훈의 달입니다.

호국, 보훈의 뜻처럼 나라를 위해 몸과 마음을 바친 분들을 생각하고 있자면,

나라를 지키기 위해 힘쓰는 군인들을 빼놓을 수 없죠.

우리나라를 지키기 위해 끈질기게 노력했던 강철 군인들을 수학으로 나타낸다면 바로 ‘이 개념’이 아닐까요?

 

 

<오일러 프로젝트 26번>

분수 중에 분자가 1인 경우를 단위분수라고 합니다. 분모가 3이나 6, 7, 9인 단위분수는 소수점 아래의 숫자가 규칙적으로 반복됩니다. 이를 ‘순환소수’ 라고 하죠. 숫자 위에 찍힌 점은 소수점 아래에서 특정한 숫자가 반복되는 ‘순환마디’를 의미합니다. 예를 들어 1/6의 경우에는 0.166666…으로 순환마디가 6입니다. 그렇다면 1000 이하의 정수 d에 대해 단위분수 1/d 중에서 가장 긴 순환마디를 갖는 d는 무엇일까요?

 

순환소수는 소수점 아래에서 0이 아닌 일정한 숫자의 배열이 되풀이되는 소수를 말합니다. 이 개념을 이용한 26번 문제의 답을 구하려면 먼저 1을 분모로 나눠 순환마디를 구하는 과정을 코딩으로 나타낼 수 있어야 하는데요, 순환소수라면 나머지가 반복해서 같은 값이 나오는 구간을 찾아야 합니다. 이를 코딩으로 어떻게 나타낼 수 있을까요?

 

 

파이썬 완전정복! '나눗셈으로 순환마디 찾기'

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

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

 

1. 리스트 형태로 나머지 기억해두기

1000 이하의 d에 대해 1/d의 순환마디를 찾으려면 1을 d로 나눠 나오는 나머지들을 기억해둬야 합니다. 파이썬에서는 어떤 함수를 실행해 나오는 값들을 대괄호([]) 안에 묶어 기억할 수 있는 리스트 명령어가 있습니다. 그리고 이 리스트 안에 특정한 값이 있는지 검색하려면 명령어 ‘in’을 사용합니다.

 

 

2. 1/d을 계산해 순환마디를 돌려주는 함수 만들기

1을 d로 나눠 나오는 나머지와 몫을 각각 리스트와 문자열로 저장해뒀다가, 반복되는 값이 있는지 알아내 순환마디(reptend)를 돌려주는 함수 reptend(d)를 만듭니다. 이때 전에 나왔던 나머지가 다시 나온다면 그 부분이 순환마디입니다. index 함수를 이용해 몇 번째 나머지에서 반복이 시작되는지 찾고, 그 위치부터 끝까지의 몫을 읽어 순환마디를 찾습니다.

 

 

 

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

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

 

 

#12 오일러 프로젝트 26번의 답을 찾기 위한 함수 e026(N)을 만듭니다.

#13 구해야 할 d의 값과 이때의 순환마디 값을 max_i, max_r로 두고 초깃값을 0과 빈 문자열로 설정합니다.

#14 i의 범위를 range(시작값, 끝값+1) 함수를 활용해 1부터 N까지로 합니다.

#15 앞서 만든 reptend 함수를 이용해 1/i의 순환마디를 구합니다.

#16, 17 가장 최근에 구한 순환마디의 길이가 전에 구한 순환마디보다 길면 max_i와 max_r에 최근의 i와 순환마디를 대입합니다.

#18 1부터 N까지 i를 바꿔가며 얻은 max_i, max_r을 돌려줍니다.

#19 26번 문제는 d가 1000 이하일 때이므로 N을 1000으로 두고 코드를 실행해 답을 구합니다.

 

 

Bonus 오일러 퀴즈

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

 

1. d가 1000 초과 2000 이하일 때, 가장 긴 순환마디를 갖는 1/d에서 d는 얼마일까?

 

2. 위의 전체 코드는 1부터 1000까지 d의 값을 바꿔가며 모든 분수의 순환마디를 찾는다. 1/2, 1/4처럼 순환소수가 아닌 소수를 걸러내는 방법에는 무엇이 있을까?

 

 

군인 말고도 우리나라에는 나라를 위해 자신을 희생하는 분들이 많습니다.

경찰이나 소방관부터 넓게 보면 코로나19 확산을 막기 위해 고생하는 의사, 간호사,

그리고 관련 연구자까지 꼽을 수 있겠지요.

6월엔 잠시 짬을 내 주변을 둘러보며 감사한 분들에게 마음을 전해보는 건 어떨까요?

 

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

  • ☎문의 02-6749-3911