Problem 64 » 履歴 » バージョン 4
Noppi, 2024/01/29 11:40
| 1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] |
|---|---|---|---|
| 2 | # [[Problem 64]] |
||
| 3 | |||
| 4 | ## Odd Period Square Roots |
||
| 5 | All square roots are periodic when written as continued fractions and can be written in the form: |
||
| 6 | |||
| 7 | $\displaystyle \quad \quad \sqrt{N}=a_0+\frac 1 {a_1+\frac 1 {a_2+ \frac 1 {a3+ \dots}}}$ |
||
| 8 | |||
| 9 | For example, let us consider $\sqrt{23}:$ |
||
| 10 | |||
| 11 | $\quad \quad \sqrt{23}=4+\sqrt{23}-4=4+\frac 1 {\frac 1 {\sqrt{23}-4}}=4+\frac 1 {1+\frac{\sqrt{23}-3}7}$ |
||
| 12 | |||
| 13 | If we continue we would get the following expansion: |
||
| 14 | |||
| 15 | $\displaystyle \quad \quad \sqrt{23}=4+\frac 1 {1+\frac 1 {3+ \frac 1 {1+\frac 1 {8+ \dots}}}}$ |
||
| 16 | |||
| 17 | The process can be summarised as follows: |
||
| 18 | |||
| 19 | $\quad \quad a_0=4, \frac 1 {\sqrt{23}-4}=\frac {\sqrt{23}+4} 7=1+\frac {\sqrt{23}-3} 7$ |
||
| 20 | $\quad \quad a_1=1, \frac 7 {\sqrt{23}-3}=\frac {7(\sqrt{23}+3)} {14}=3+\frac {\sqrt{23}-3} 2$ |
||
| 21 | $\quad \quad a_2=3, \frac 2 {\sqrt{23}-3}=\frac {2(\sqrt{23}+3)} {14}=1+\frac {\sqrt{23}-4} 7$ |
||
| 22 | $\quad \quad a_3=1, \frac 7 {\sqrt{23}-4}=\frac {7(\sqrt{23}+4)} 7=8+\sqrt{23}-4$ |
||
| 23 | $\quad \quad a_4=8, \frac 1 {\sqrt{23}-4}=\frac {\sqrt{23}+4} 7=1+\frac {\sqrt{23}-3} 7$ |
||
| 24 | $\quad \quad a_5=1, \frac 7 {\sqrt{23}-3}=\frac {7 (\sqrt{23}+3)} {14}=3+\frac {\sqrt{23}-3} 2$ |
||
| 25 | $\quad \quad a_6=3, \frac 2 {\sqrt{23}-3}=\frac {2(\sqrt{23}+3)} {14}=1+\frac {\sqrt{23}-4} 7$ |
||
| 26 | $\quad \quad a_7=1, \frac 7 {\sqrt{23}-4}=\frac {7(\sqrt{23}+4)} {7}=8+\sqrt{23}-4$ |
||
| 27 | |||
| 28 | It can be seen that the sequence is repeating. For conciseness, we use the notation $\sqrt{23}=[4;(1,3,1,8)]$, to indicate that the block (1,3,1,8) repeats indefinitely. |
||
| 29 | |||
| 30 | The first ten continued fraction representations of (irrational) square roots are: |
||
| 31 | |||
| 32 | $\quad \quad \sqrt{2}=[1;(2)]$, period=$1$ |
||
| 33 | $\quad \quad \sqrt{3}=[1;(1,2)]$, period=$2$ |
||
| 34 | $\quad \quad \sqrt{5}=[2;(4)]$, period=$1$ |
||
| 35 | $\quad \quad \sqrt{6}=[2;(2,4)]$, period=$2$ |
||
| 36 | $\quad \quad \sqrt{7}=[2;(1,1,1,4)]$, period=$4$ |
||
| 37 | $\quad \quad \sqrt{8}=[2;(1,4)]$, period=$2$ |
||
| 38 | $\quad \quad \sqrt{10}=[3;(6)]$, period=$1$ |
||
| 39 | $\quad \quad \sqrt{11}=[3;(3,6)]$, period=$2$ |
||
| 40 | $\quad \quad \sqrt{12}=[3;(2,6)]$, period=$2$ |
||
| 41 | $\quad \quad \sqrt{13}=[3;(1,1,1,1,6)]$, period=$5$ |
||
| 42 | |||
| 43 | Exactly four continued fractions, for $N \le 13$, have an odd period. |
||
| 44 | |||
| 45 | How many continued fractions for $N \le 10\,000$ have an odd period? |
||
| 46 | |||
| 47 | ## 奇数周期の平方根 |
||
| 48 | 平方根は連分数の形で表したときに周期的であり, 以下の形で書ける: |
||
| 49 | |||
| 50 | 2 | Noppi | √N = $a_0$ + 1 / ($a_1$ + 1 / ($a_2$ + 1 / ($a_3$ + ...))) |
| 51 | 1 | Noppi | |
| 52 | 例えば, √23を考えよう. |
||
| 53 | |||
| 54 | √23 = 4 + √23 - 4 = 4 + 1 / (1 / (√23 - 4)) = 4 + 1 / (1 + (√23 - 3) / 7) |
||
| 55 | |||
| 56 | となる. |
||
| 57 | |||
| 58 | この操作を続けていくと, |
||
| 59 | |||
| 60 | √23 = 4 + 1 / (1 + 1 / (3 + 1 / (1 + 1 / (8 + ...)))) |
||
| 61 | |||
| 62 | を得る. |
||
| 63 | |||
| 64 | 操作を纏めると以下になる: |
||
| 65 | |||
| 66 | 2 | Noppi | * $a_0$ = 4, 1/(√23-4) = (√23+4)/7 = 1 + (√23-3)/7 |
| 67 | * $a_1$ = 1, 7/(√23-3) = 7(√23+3)/14 = 3 + (√23-3)/2 |
||
| 68 | * $a_2$ = 3, 2/(√23-3) = 2(√23+3)/14 = 1 + (√23-4)/7 |
||
| 69 | * $a_3$ = 1, 7/(√23-4) = 7(√23+4)/7 = 8 + (√23-4) |
||
| 70 | * $a_4$ = 8, 1/(√23-4) = (√23+4)/7 = 1 + (√23-3)/7 |
||
| 71 | * $a_5$ = 1, 7/(√23-3) = 7(√23+3)/14 = 3 + (√23-3)/2 |
||
| 72 | * $a_6$ = 3, 2/(√23-3) = 2(√23+3)/14 = 1 + (√23-4)/7 |
||
| 73 | * $a_7$ = 1, 7/(√23-4) = 7(√23+4)/7 = 8 + (√23-4) |
||
| 74 | 1 | Noppi | |
| 75 | よって, この操作は繰り返しになることが分かる. 表記を簡潔にするために, √23 = [4;(1,3,1,8)]と表す. (1,3,1,8)のブロックは無限に繰り返される項を表している. |
||
| 76 | |||
| 77 | 最初の10個の無理数である平方根を連分数で表すと以下になる. |
||
| 78 | |||
| 79 | * √2=[1;(2)], period=1 |
||
| 80 | * √3=[1;(1,2)], period=2 |
||
| 81 | * √5=[2;(4)], period=1 |
||
| 82 | * √6=[2;(2,4)], period=2 |
||
| 83 | * √7=[2;(1,1,1,4)], period=4 |
||
| 84 | * √8=[2;(1,4)], period=2 |
||
| 85 | * √10=[3;(6)], period=1 |
||
| 86 | * √11=[3;(3,6)], period=2 |
||
| 87 | * √12= [3;(2,6)], period=2 |
||
| 88 | * √13=[3;(1,1,1,1,6)], period=5 |
||
| 89 | |||
| 90 | N ≤ 13で奇数の周期をもつ平方根は丁度4つある. |
||
| 91 | |||
| 92 | N ≤ 10000 について奇数の周期をもつ平方根が何個あるか答えよ. |
||
| 93 | |||
| 94 | ```scheme |
||
| 95 | 3 | Noppi | (import (scheme base) |
| 96 | (gauche base) |
||
| 97 | (util match) |
||
| 98 | (scheme inexact)) |
||
| 99 | |||
| 100 | ;;; a + (√b - c) / d → (a b c d) |
||
| 101 | ;;; |
||
| 102 | ;;; (√b - c) / d を有理化する → |
||
| 103 | ;;; (d * (√b + c)) / (b - c^2) |
||
| 104 | ;;; |
||
| 105 | ;;; d / (b - c^2) を既約分数にして 1/q と置く → |
||
| 106 | ;;; (√b + c) / q |
||
| 107 | (define (next-fraction lis) |
||
| 108 | (assume (= (length lis) 4)) |
||
| 109 | (match-let1 (a b c d) |
||
| 110 | lis |
||
| 111 | (let-values ([(isqrt-b _) (exact-integer-sqrt b)]) |
||
| 112 | (if (<= d (- (sqrt b) c)) |
||
| 113 | `(,(+ a (* d isqrt-b)) ,b ,(+ c isqrt-b) ,d) |
||
| 114 | 4 | Noppi | (let* ([q (/ (- b (* c c)) |
| 115 | d)] |
||
| 116 | [next-a (div (+ isqrt-b c) |
||
| 117 | 3 | Noppi | q)] |
| 118 | [next-b b] |
||
| 119 | [next-c (- (* q next-a) c)] |
||
| 120 | [next-d q]) |
||
| 121 | `(,next-a ,next-b ,next-c ,next-d)))))) |
||
| 122 | |||
| 123 | (define (continued-fraction-list num) |
||
| 124 | (assume (exact-integer? num)) |
||
| 125 | (assume (<= 2 num)) |
||
| 126 | (let* ([first-fraction (next-fraction `(0 ,num 0 1))] |
||
| 127 | [first-int (car first-fraction)] |
||
| 128 | [end-fraction (next-fraction first-fraction)] |
||
| 129 | [result `(,(car end-fraction) ,first-int)]) |
||
| 130 | (let loop ([current-fraction (next-fraction end-fraction)] |
||
| 131 | [result result]) |
||
| 132 | (if (equal? current-fraction end-fraction) |
||
| 133 | (reverse result) |
||
| 134 | (loop (next-fraction current-fraction) |
||
| 135 | (cons (car current-fraction) result)))))) |
||
| 136 | |||
| 137 | (define (non-square-num-list num) |
||
| 138 | (filter (^n |
||
| 139 | (let-values ([(_ b) (exact-integer-sqrt n)]) |
||
| 140 | (not (zero? b)))) |
||
| 141 | (iota (- num 1) 2))) |
||
| 142 | |||
| 143 | (define answer-64 |
||
| 144 | (length |
||
| 145 | (filter (^[lis] |
||
| 146 | (even? (length lis))) |
||
| 147 | (map (^n |
||
| 148 | (continued-fraction-list n)) |
||
| 149 | (non-square-num-list 10000))))) |
||
| 150 | |||
| 151 | (format #t "64: ~d~%" answer-64) |
||
| 152 | 1 | Noppi | ``` |