본문 바로가기

순환마디

(3)
[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 ..
[Python] 분수의 순환소수, 순환마디 구하기 예전에 순환소수를 구하는 코드를 만들어서 포스팅을 했었다. ( https://daewonyoon.tistory.com/354 ) 손으로 하는 나누기를 그대로 따라하면서, 나머지를 기억하고, 이전에 나왔던 나머지가 다시 나오면, 싸이클이 반복되어 순환마디를 구할 수 있다는 아이디어였다. 다른 방법이 좀 더 간단할지 어쩔지 궁금해서 대충 실험을 해 봤다. 이번 아이디어는 이렇다. 순환소수는 결국 999...99 를 분모로 하는 소수로 바꿀 수 있다. 그러니, 주어진 분수의 분모가, 999...99 를 떨어지게 나눌 때까지, 9, 99, 999, 9999, ... 를 늘려가고, 나누어 떨어지면, 그 배수를 분자에도 곱하면, 분자가 순환마디가 된다. 테스트를 해 본 것은 다음과 같다. def solve(a): ..
1/1, 1/2, ... 1/999 의 순환소수 표현 프로젝토 오일러 26번 문제를 오랜만에 다시 풀었다. 중간결과로 n=1부터 1000 이하까지의 1/n 의 순환소수 표현을 구했다. 순환마디의 길이가 커지는 숫자들은 거의 소수로 보이고, 이 숫자들에 대해서 순환마디의 길이는 n-1 이다. 나아가 오일러파이함수(totient)와 관련이 있음. (아래 see also 1, 2) see also : 0. 관련파이썬코드 1. http://daewonyoon.pythonanywhere.com/fraction/ 2. 순환마디에대한수학적논의 3. mathnet의 관련항목 괄호로 감싼 것이 반복되는 순환마디이다. 1/1 = 1.(0) 1/2 = 0.5(0) 1/3 = 0.(3) 1/4 = 0.25(0) 1/5 = 0.2(0) 1/6 = 0.1(6) 1/7 = 0.(14..