본문바로가기
[오일러 프로젝트] 코딩으로 원주율을 구하려면 어떻게 해야 할까?
수학동아 2021.03.02 14:44

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

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

 

 

“답답했던 마음속 고민이 있다면 망설이지 말고 드루와~.”

오일러 보살과 저 홍 동자가 꽉 막힌 속을 뚫어 줄 신통방통 해결책을 드립니다!

3월 14일 파이데이를 맞아 마침 원주율에 대한 고민이 있다고요?

무엇이든 물어보세요, 코딩으로 해결해 드립니다!

 

 

<오일러 프로젝트 π번>

원주율 개념이 등장한 이래로 무리수인 원주율 값을 계산하기 위해 많은 방법이 나왔습니다. 대표적으로 몬테카를로 방법과 오일러 급수, 월리스 급수, 그리고 닐라칸타 식 등을 꼽을 수 있는데요, 이름만 들어도 어렵다고요? 저도 처음이니 같이 배우면서 원주율을 구해봐요!

 

올해도 어김없이 3월 14일 파이데이가 돌아왔습니다. 파이데이를 맞아 원주율 값을 코딩으로 구하는 문제를 해결해볼까 합니다. 참고로 이 문제는 실제 오일러 프로젝트 홈페이지에 실려있지 않은, 파이데이 기념 π번째 문제입니다!

 

첫 번째로 원주율을 구하는 가장 간단한 방법 중 하나인 몬테카를로 방법을 이용해 구해보겠습니다.  x축과 y축으로 이뤄진 좌표평면에 변의 길이가 1인 정사각형을 그리고, 그 안에 속하는 점을 만들어 반지름 1인 단위원의 1/4 조각 안에 들어가는 점의 개수를 세는 방법입니다. 이때 점의 총 개수를 N, 그리고 1사분면의 사분원에 들어간 점의 개수를 k라고 하면 아래가 성립합니다.

 

 

그리고 수식으로 근삿값을 구할 수도 있습니다. 그중 한 가지가 14세기 인도의 수학자 마다바가 만든 '닐라칸타 식'입니다. 

 

 

 

파이썬 완전정복! '가능한 경로의 수 세기'

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

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

 

1. 몬테카를로 방법으로 원주율 구하기

파이썬에서는 'random 모듈'을 사용해 변의 길이가 1인 정사각형 안에 들어가는 점을 무작위로 만들 수 있습니다. 그중에서도 0~1 사이의 x, y 값을 무작위로 만드는 함수는 random.random()입니다. 여기서 random() 함수는 1보다 작고 0보다는 크거나 같은 x, y 값을 만들기 때문에 원 안에 들어가는지 보려면 원의 방정식에서 x2+y2<1을 만족하는지 봐야 합니다. 참고로 x, y 모두 1보다 작아 x2+y2=1일 때는 고려하지 않습니다.

 

 

2. 닐라칸타 식으로 원주율 더 정확히 구하기

닐라칸타 식에서 3에 더하는 분수에 1번부터 N번까지 번호를 매기면 일정한 규칙을 찾을 수 있습니다. 첫 번째 분수인 4/(2×3×4)를 보면 분자는 4고, 분모는 첫 번째 짝수에서 시작해 연속한 3개 자연수를 곱한 것임을 알 수 있습니다. 따라서 이를 N번째 분수까지 넓히면 4/((N번째 짝수)(N번째 짝수+1)(N번째 짝수+2))=4/(2N(2N+1)(2N+2))로 나타낼 수 있습니다. 그리고 닐라칸타 식에서 홀수 번째 분수는 더하고, 짝수 번째 분수는 빼야 하므로 이를 유의해 코드를 만듭니다.

 

 

 

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

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

 

 

#3 몬테카를로 방법으로 원주율의 근삿값을 구하는 함수를 정의합니다.

#4, 5, 6, 7, 8, 9 x, y 모두 0보다 크고 1보다 작은 점 (x, y)를 무작위로 만들고, 1사분원 안에 들어가는 점의 개수를 셉니다.

#10 몬테카를로 방법에서 원주율 값을 구하는 식인 π ≈ 4k/N를 이용해 원주율의 근삿값을 구합니다.

#11 구한 원주율의 근삿값을 돌려줍니다.

#12 닐라칸타 식을 이용해 원주율 값을 구하는 함수를 정의합니다.

#13 분수가 더해질 3을 초깃값으로 둡니다.

#14, 15, 16, 17, 18 닐라칸타 식의 분수들을 1번부터 N번까지 순서대로 만듭니다.

#19, 20 만든 분수들을 3에 차례대로 더해 원주율의 근삿값을 구합니다.

 

 

BONUS 오일러 퀴즈

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

 

1. N=1000000으로 두고 몬테카를로 방법과 닐라칸타 식을 각각 실행해보자. 그리고 실제 원주율 값과 얼마나 차이나는지 구해보자.

 

2. 닐라칸타 식처럼 오일러 역시 원주율을 구할 수 있는 오일러의 곱셈 공식을 만들었다. 이를 이용해 원주율을 구해보자.

Hint. 오일러의 곱셈 공식 π2/6 = 1/12 + 1/22 + 1/32 + …

 

 

혹시 몬테카를로 방법이나 닐라칸타 식보다 원주율을 더 정확히 구하는 방법을 알고 있다고요?

그렇다면 댓글을 남겨 알려주세요!

원주율에 대한 궁금증이나 고민거리도 남겨주시면 해결해드립니다~!

 

  •  
    숫자파이 Lv.7 2021.03.21 14:15 비밀댓글
    확인요청중
    비밀 댓글이 등록 되었습니다.
    댓글 작성하기 댓글수0
  •  
    숫자파이 Lv.7 2021.03.21 18:15

    아 그리고 궁금한 게 있는데요, 주니어폴리매스 문제는 정답요청확인을 안 해주는 것 같은데 왜 그렇죠?

    댓글 작성하기 좋아요0 댓글수0
  • 폴리매스 문제는 2019년도 정부의 재원으로 한국과학창의재단의 지원을 받아 수행된 성과물입니다.

  • ☎문의 02-6749-3911