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 [1]:
def cycle_len(N):
    n = 1
    ns = []
    while True:
        while n < N:
            n *= 10
        if n in ns:
            return len(ns)
        ns.append(n)
        
        n = n % N
        if n % N == 0:
            return 0

max_c, max_i = 0, 0
for i in range(1,1001):
    c = cycle_len(i)
    if c > max_c:
        max_c = c
        max_i = i
        print max_c, max_i


1 3
2 6
6 7
15 17
17 19
20 23
26 29
42 47
53 59
54 61
87 97
98 109
101 113
117 131
134 149
150 167
161 179
162 181
173 193
200 223
206 229
209 233
231 257
236 263
242 269
245 289
281 313
303 337
307 361
330 367
341 379
344 383
350 389
377 419
389 433
414 461
438 487
441 491
449 499
452 503
458 509
486 541
513 571
519 577
533 593
557 619
582 647
593 659
630 701
638 709
654 727
668 743
729 811
738 821
740 823
771 857
776 863
798 887
843 937
846 941
857 953
873 971
879 977
884 983

In [ ]: