Problem 64 » 履歴 » バージョン 3
Noppi, 2024/01/29 09:34
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 | (let* ([temp-frac (/ d |
||
115 | (- b |
||
116 | (* c c)))] |
||
117 | [q (denominator temp-frac)] |
||
118 | [next-a (div (+ isqrt-b |
||
119 | c) |
||
120 | q)] |
||
121 | [next-b b] |
||
122 | [next-c (- (* q next-a) c)] |
||
123 | [next-d q]) |
||
124 | `(,next-a ,next-b ,next-c ,next-d)))))) |
||
125 | |||
126 | (define (continued-fraction-list num) |
||
127 | (assume (exact-integer? num)) |
||
128 | (assume (<= 2 num)) |
||
129 | (let* ([first-fraction (next-fraction `(0 ,num 0 1))] |
||
130 | [first-int (car first-fraction)] |
||
131 | [end-fraction (next-fraction first-fraction)] |
||
132 | [result `(,(car end-fraction) ,first-int)]) |
||
133 | (let loop ([current-fraction (next-fraction end-fraction)] |
||
134 | [result result]) |
||
135 | (if (equal? current-fraction end-fraction) |
||
136 | (reverse result) |
||
137 | (loop (next-fraction current-fraction) |
||
138 | (cons (car current-fraction) result)))))) |
||
139 | |||
140 | (define (non-square-num-list num) |
||
141 | (filter (^n |
||
142 | (let-values ([(_ b) (exact-integer-sqrt n)]) |
||
143 | (not (zero? b)))) |
||
144 | (iota (- num 1) 2))) |
||
145 | |||
146 | (define answer-64 |
||
147 | (length |
||
148 | (filter (^[lis] |
||
149 | (even? (length lis))) |
||
150 | (map (^n |
||
151 | (continued-fraction-list n)) |
||
152 | (non-square-num-list 10000))))) |
||
153 | |||
154 | (format #t "64: ~d~%" answer-64) |
||
155 | 1 | Noppi | ``` |