1000보다 작은 정수 d중에서 1/d의 순환마디의 길이가 가장 긴 놈을 찾아라. 순환마디를 찾는 알고리즘이다.
import numpy as np
l, d = 0.,0.

def length(n):
    i,j,k = 0.,0.,0.
    if n%2 == 0 or n%5 == 0:
        1.
    else:
        a = 1.0/n

        while True:
            a *= 10.
            k=1.
            b = 1.0/n
            while k<j:
                if (np.around(a-b,9)%1.)==0.:
                    return j-k
                b *= 10.

                k+=1.
            j+=1.

for i in np.arange(2.,1000.,1.):
    newlength = length(i)
    if l <= newlength:
        l,d = newlength, i
print(l,d)

답은 나오는 코드인데, 뭔가 이상하다. 이번에도 파이썬에서 발생한 float의 roundoff error때문에 around함수를 넣는 삽질을 했다.


by snowall 2012. 1. 28. 00:51