Problem 47 » 履歴 » バージョン 1
Noppi, 2024/01/17 01:32
1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] |
---|---|---|---|
2 | # [[Problem 47]] |
||
3 | |||
4 | ## Distinct Primes Factors |
||
5 | <p>The first two consecutive numbers to have two distinct prime factors are:</p> |
||
6 | \begin{align} |
||
7 | 14 &= 2 \times 7\\ |
||
8 | 15 &= 3 \times 5. |
||
9 | \end{align} |
||
10 | <p>The first three consecutive numbers to have three distinct prime factors are:</p> |
||
11 | \begin{align} |
||
12 | 644 &= 2^2 \times 7 \times 23\\ |
||
13 | 645 &= 3 \times 5 \times 43\\ |
||
14 | 646 &= 2 \times 17 \times 19. |
||
15 | \end{align} |
||
16 | |||
17 | Find the first four consecutive integers to have four distinct prime factors each. What is the first of these numbers? |
||
18 | |||
19 | ## 異なる素因数 |
||
20 | <p>それぞれ2つの異なる素因数を持つ連続する2つの数が最初に現れるのは:</p> |
||
21 | \begin{align} |
||
22 | 14 &= 2 \times 7\\ |
||
23 | 15 &= 3 \times 5. |
||
24 | \end{align} |
||
25 | <p>それぞれ3つの異なる素因数を持つ連続する3つの数が最初に現れるのは:</p> |
||
26 | \begin{align} |
||
27 | 644 &= 2^2 \times 7 \times 23\\ |
||
28 | 645 &= 3 \times 5 \times 43\\ |
||
29 | 646 &= 2 \times 17 \times 19. |
||
30 | \end{align} |
||
31 | |||
32 | 最初に現れるそれぞれ4つの異なる素因数を持つ連続する4つの数を求めよ. その最初の数はいくつか? |
||
33 | |||
34 | ```scheme |
||
35 | (import (scheme base) |
||
36 | (gauche base)) |
||
37 | |||
38 | (define (factorize num) |
||
39 | "異なる素因数を列挙する" |
||
40 | (assume (exact-integer? num)) |
||
41 | (assume (<= 2 num)) |
||
42 | (let loop ([index 2] [rest num] [lis '()]) |
||
43 | (cond |
||
44 | [(= rest 1) lis] |
||
45 | [(< num (* index index)) |
||
46 | (cons rest lis)] |
||
47 | [(and (zero? (mod rest index)) |
||
48 | (not (null? lis)) |
||
49 | (= index (car lis))) |
||
50 | (loop index |
||
51 | (div rest index) |
||
52 | lis)] |
||
53 | [(zero? (mod rest index)) |
||
54 | (loop index |
||
55 | (div rest index) |
||
56 | (cons index lis))] |
||
57 | [else |
||
58 | (loop (+ index 1) rest lis)]))) |
||
59 | |||
60 | (define first-4factorize-sequence |
||
61 | (let loop ([n1 645]) |
||
62 | (let ([n2 (+ n1 1)] |
||
63 | [n3 (+ n1 2)] |
||
64 | [n4 (+ n1 3)]) |
||
65 | (if (and (<= 4 (length (factorize n1))) |
||
66 | (<= 4 (length (factorize n2))) |
||
67 | (<= 4 (length (factorize n3))) |
||
68 | (<= 4 (length (factorize n4)))) |
||
69 | (cons* n1 n2 n3 n4 '()) |
||
70 | (loop (+ n1 1)))))) |
||
71 | |||
72 | (define answer-47 |
||
73 | (car first-4factorize-sequence)) |
||
74 | |||
75 | (format #t "47: ~d~%" answer-47) |
||
76 | ``` |