본문 바로가기

연분수

(4)
[Python] 2117658/8642334 와 연분수표현 2117658/8642334 각 디지트의 연분수꼴의 값이 같다는 신기한 글을 봐서 파이썬으로 계산을 해 봤다. >>> from fractions import Fraction >>> l1 = list(map(int, "2117658")) >>> l2 = list(map(int, "8642334")) >>> def frac(l1, l2): if len(l1) == 1: return Fraction(l1[0], l2[0]) return l1[0]/(l2[0] + frac(l1[1:], l2[1:])) >>> frac(l1, l2) Fraction(37, 151) >>> Fraction(2117658, 8642334) Fraction(37, 151) 이런 꼴의 결과를 주는 다른 숫자도 찾아보고 싶네.
[EP 057] 2의 제곱근의 연분수 표현 #!/usr/bin/env python def jarisu(n): su = 0 while n != 0: su += 1 n //= 10 return su bunja = 3 bunmo = 2 count = 0 for i in range(2, 1001): bunja, bunmo = bunja + 2 * bunmo, bunja + bunmo if jarisu(bunja) > jarisu(bunmo): count += 1 print(count) 오일러 프로젝트 57번 문제. 2의 제곱근을 연분수(continued fraction) 모양으로 근사한 분수들(초기 1000항)의 분자와 분모의 자리수 비교하여 분자의 자리수가 분모의 자리수보다 커지는 것의 갯수를 구하는 것. https://daewonyoon.tistor..
Sqrt(n) 의 연분수 표현 구하기 Sqrt(n) 의 연분수를 정확하게 구하기. sqrt(n) 의 연분수는 [ a_0;a_1, a_2, ... ] 이고 유리수 소수표현처럼 순환마디가 있을거다. a_n = [ b_n ] 으로 정의되고, b_{n+1} = 1 / ( b_n - a_n ) 이고, b_0 = sqrt(n) b_n 은 어떻게든 분모를 유리화할수 있고, b_n = x_n sqrt(n) + y_n (x_n, y_n 은 유리수) 로 표현이 가능하다. 그래서, x_n, y_n 은 언젠가는 동일한 것이 나와서 순환할 것. sqrt(2) = [ 1; 2, 2, 2, ... ] 이다. sqrt(3) = [ 1; 1, 2, 1, 2, ... ] 이 과정을 프로그래밍해 본다. #!/usr/bin/env python # ----------------..
[Python] 실수값 연분수로 근사값 분수 찾기, approx real value using continued fraction import math def contfrac(x, n=10, mx=1000): """ get continued fraction of real x 1 x = r0 + -------------------------- 1 r1 + -------------------- 1 r2 + ------------- r3 + .... n : maximum length of returning r:list mx : maximum ri return : continued fraction, list of integers """ r = [int(x)] if n == 0 or (x - r[0] < 1 / mx): return r return r + contfrac(1 / (x - r[0]), n - 1, mx) def cf2frac(..