In [ ]:
"""
A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:

1/2	= 	0.5
1/3	= 	0.(3)
1/4	= 	0.25
1/5	= 	0.2
1/6	= 	0.1(6)
1/7	= 	0.(142857)
1/8	= 	0.125
1/9	= 	0.(1)
1/10	= 	0.1
Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle.

Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.

"""

In [ ]:
"""

x += 2    x = x + 2
x -= 3    x = x - 3
(+=, -=, *=, /=, //=, %=, **=, <<=, >>=, &=, ^=, |=)

"""

In [24]:
def findDecimalRepeatingSequence(num, den, searchDepth):
    """For a fraction num/den, returns the decimal repeating sequence, up to searchDepth in length.
    Otherwise returns None. Can be modified to also return the division result."""
    
    reps = []
    rep =[]
    result = []

    resNum = num // den
    num = (num-resNum*den)*10
    
    while len(result) < searchDepth:
        resNum = num // den
        rep = [num,resNum,den]
        if rep not in reps:
            result.append(resNum)
            reps.append(rep)
            num = (num-resNum*den)*10
        else:
            return result
    
    return None

def maxRepSeqBelowD(d,sD):
    """Returns maximum repeating decimal sequence for 1/d."""
    currSeq = []
    lenCurrSeq = 0
    currI = 0
    for i in range(1,d):
        seq = findDecimalRepeatingSequence(1,i,sD)
        if seq:
            seqlen = len(seq)
            if seqlen > lenCurrSeq:
                currSeq = seq
                lenCurrSeq = seqlen
                currI = i
    return currI

In [25]:
maxRepSeqBelowD(1000,1000)


Out[25]:
983

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]: