Problem 26 » 履歴 » バージョン 2
Noppi, 2024/01/10 13:23
| 1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] |
|---|---|---|---|
| 2 | # [[Problem 26]] |
||
| 3 | |||
| 4 | ## Reciprocal Cycles |
||
| 5 | A unit fraction contains $1$ in the numerator. The decimal representation of the unit fractions with denominators $2$ to $10$ are given: |
||
| 6 | |||
| 7 | $1/2 = 0.5$ |
||
| 8 | $1/3 =0.(3)$ |
||
| 9 | $1/4 =0.25$ |
||
| 10 | $1/5 = 0.2$ |
||
| 11 | $1/6 = 0.1(6)$ |
||
| 12 | $1/7 = 0.(142857)$ |
||
| 13 | $1/8 = 0.125$ |
||
| 14 | $1/9 = 0.(1)$ |
||
| 15 | $1/10 = 0.1$ |
||
| 16 | |||
| 17 | Where $0.1(6)$ means $0.166666\cdots$, and has a $1$-digit recurring cycle. It can be seen that $1/7$ has a $6$-digit recurring cycle. |
||
| 18 | |||
| 19 | Find the value of $d \lt 1000$ for which $1/d$ contains the longest recurring cycle in its decimal fraction part. |
||
| 20 | |||
| 21 | ## 逆数の循環節 その1 |
||
| 22 | 単位分数とは分子が1の分数である. 分母が2から10の単位分数を10進数で表記すると次のようになる. |
||
| 23 | |||
| 24 | 1/2 = 0.5 |
||
| 25 | 1/3 = 0.(3) |
||
| 26 | 1/4 = 0.25 |
||
| 27 | 1/5 = 0.2 |
||
| 28 | 1/6 = 0.1(6) |
||
| 29 | 1/7 = 0.(142857) |
||
| 30 | 1/8 = 0.125 |
||
| 31 | 1/9 = 0.(1) |
||
| 32 | 1/10 = 0.1 |
||
| 33 | |||
| 34 | 0.1(6)は 0.166666... という数字であり, 1桁の循環節を持つ. 1/7 の循環節は6桁ある. |
||
| 35 | |||
| 36 | d < 1000 なる 1/d の中で小数部の循環節が最も長くなるような d を求めよ. |
||
| 37 | |||
| 38 | ```scheme |
||
| 39 | 2 | Noppi | (import (scheme base) |
| 40 | (gauche base) |
||
| 41 | (scheme sort)) |
||
| 42 | |||
| 43 | (define (get-recurring-cycle n) |
||
| 44 | (let loop ([index 0] [current-mod 1] [lis '()]) |
||
| 45 | (cond |
||
| 46 | [(zero? current-mod) 0] |
||
| 47 | [(find (^c (= current-mod (cdr c))) lis) |
||
| 48 | => (^c (- index (car c)))] |
||
| 49 | [else (loop (+ index 1) |
||
| 50 | (mod (* current-mod 10) n) |
||
| 51 | (cons `(,index . ,current-mod) lis))]))) |
||
| 52 | |||
| 53 | (define (enum-recurring-cycles n) |
||
| 54 | (map (^n (cons n (get-recurring-cycle n))) |
||
| 55 | (iota (- n 1) 1))) |
||
| 56 | |||
| 57 | (define answer-26 |
||
| 58 | (car |
||
| 59 | (last |
||
| 60 | (list-sort (^[a b] (< (cdr a) (cdr b))) |
||
| 61 | (enum-recurring-cycles 1000))))) |
||
| 62 | |||
| 63 | (format #t "26: ~d~%" answer-26) |
||
| 64 | 1 | Noppi | ``` |