본문 바로가기

Fraction

(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) 이런 꼴의 결과를 주는 다른 숫자도 찾아보고 싶네.
[Python] 십진수소수 이진수로 변환하기 십진수 정수를 이진수로 변환하는 것은 파이썬이 기본으로 제공하는 bin 함수를 사용하면 된다. 소수점 이하 자릿수를 포함한 십진수를 이진수로 표현하는 함수를 만들어 보았다. 입력을 float 으로 변환하면, 부동소수점 오류로 정확한 계산이 불가능하다. 분수를 다룰 수 있는 fractions 모듈을 이용하여 정확하게 소수점 아래까지 구할 수 있다. 순환마디까지 구할 수 있는데, 일단 무시하고 30자리까지 구하는 걸 구현했다. from fractions import Fraction def conv2bin(s): x = Fraction(s) x1 = x//1 x2 = x - x1 digits = [] tail = "..." for _ in range(30): if x2 == 0: tail = "" break ..
[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..
[파이썬] 이집트분수 >>> def egypt(x): ''' x = (a, b) which represent a/b ''' r = [] while x[1]%x[0]: m = x[1]//x[0] + 1 r.append(m) x = (x[0]*m - x[1], x[1]*m) r.append(x[1]//x[0]) print('+'.join('1/%d'%d for d in r)) return r >>> egypt((4, 5)) 1/2+1/4+1/20 [2, 4, 20] >>> egypt((2, 11)) 1/6+1/66 [6, 66] >>> egypt((761, 1000)) 1/2+1/4+1/91+1/91000 [2, 4, 91, 91000] 분수의 이집트분수 분해를 구하는 코드. 버그 없는지 잘 모르겠는데, 일단 깔끔하게 됨.