プロジェクト

全般

プロフィール

Problem 12 » 履歴 » バージョン 2

Noppi, 2023/12/29 15:07

1 1 Noppi
[ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]]
2
# [[Problem 12]]
3
4
## Highly Divisible Triangular Number
5
The sequence of triangle numbers is generated by adding the natural numbers. So the $7$<sup>th</sup> triangle number would be $1 + 2 + 3 + 4 + 5 + 6 + 7 = 28$. The first ten terms would be:
6
$$1, 3, 6, 10, 15, 21, 28, 36, 45, 55, \dots$$
7
Let us list the factors of the first seven triangle numbers:
8
9
 **1:** 1
10
 **3:** 1,3
11
 **6:** 1,2,3,6
12
**10:** 1,2,5,10
13
**15:** 1,3,5,15
14
**21:** 1,3,7,21
15
**28:** 1,2,4,7,14,28
16
17
We can see that $28$ is the first triangle number to have over five divisors.
18
What is the value of the first triangle number to have over five hundred divisors?
19
20
## 高度整除三角数
21
三角数の数列は自然数の和で表わされ, 7番目の三角数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 である. 三角数の最初の10項は:
22
$$1, 3, 6, 10, 15, 21, 28, 36, 45, 55, \dots$$
23
となる.
24
25
最初の7項について, その約数を列挙すると, 以下のとおり.
26
27
 **1:** 1
28
 **3:** 1,3
29
 **6:** 1,2,3,6
30
**10:** 1,2,5,10
31
**15:** 1,3,5,15
32
**21:** 1,3,7,21
33
**28:** 1,2,4,7,14,28
34
35
これから, 7番目の三角数である28は, 5個より多く約数をもつ最初の三角数であることが分かる.
36
では, 500個より多く約数をもつ最初の三角数はいくつか.
37
38
```scheme
39 2 Noppi
#!r6rs
40
#!chezscheme
41
42
(import (chezscheme))
43
44
(define (triangular-numbers end-condition)
45
  (let loop ([i 1] [current 0] [result '()])
46
    (if (and
47
          (not (null? result))
48
          (end-condition result))
49
      result
50
      (let ([next (+ current i)])
51
        (loop (add1 i) next (cons next result))))))
52
53
(define (divisors num)
54
  (let ([check-max (isqrt num)])
55
    (let loop ([i 1] [result '()])
56
      (cond
57
        [(< check-max i) result]
58
        [(zero? (mod num i))
59
         (loop (add1 i) (cons* i (div num i) result))]
60
        [else (loop (add1 i) result)]))))
61
62
(define over500-divisors-triangular-number
63
  (triangular-numbers
64
    (lambda (lis)
65
      (< 500 (length (divisors (car lis)))))))
66
67
(define answer-12
68
  (car over500-divisors-triangular-number))
69
70
(printf "12: ~D~%" answer-12)
71 1 Noppi
```