プロジェクト

全般

プロフィール

Problem 46 » 履歴 » バージョン 1

Noppi, 2024/01/16 13:10

1 1 Noppi
[ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]]
2
# [[Problem 46]]
3
4
## Goldbach's Other Conjecture
5
<p>It was proposed by Christian Goldbach that every odd composite number can be written as the sum of a prime and twice a square.</p>
6
\begin{align}
7
9 = 7 + 2 \times 1^2\\
8
15 = 7 + 2 \times 2^2\\
9
21 = 3 + 2 \times 3^2\\
10
25 = 7 + 2 \times 3^2\\
11
27 = 19 + 2 \times 2^2\\
12
33 = 31 + 2 \times 1^2
13
\end{align}
14
15
It turns out that the conjecture was false.
16
17
What is the smallest odd composite that cannot be written as the sum of a prime and twice a square?
18
19
## もうひとつのゴールドバッハの予想
20
<p>Christian Goldbachは全ての奇合成数は平方数の2倍と素数の和で表せると予想した.</p>
21
\begin{align}
22
9 = 7 + 2 \times 1^2\\
23
15 = 7 + 2 \times 2^2\\
24
21 = 3 + 2 \times 3^2\\
25
25 = 7 + 2 \times 3^2\\
26
27 = 19 + 2 \times 2^2\\
27
33 = 31 + 2 \times 1^2
28
\end{align}
29
30
後に, この予想は誤りであることが分かった.
31
32
平方数の2倍と素数の和で表せない最小の奇合成数はいくつか?
33
34
```scheme
35
(import (scheme base)
36
        (gauche base))
37
38
(define (prime? num)
39
  (assume (exact-integer? num))
40
  (assume (positive? num))
41
  (cond
42
    [(= num 1) #f]
43
    [(= num 2) #t]
44
    [(even? num) #f]
45
    [(= num 3) #t]
46
    [(zero? (mod num 3)) #f]
47
    [else
48
      (let loop ([i 1])
49
        (let ([n6-1 (- (* i 6) 1)]
50
              [n6+1 (+ (* i 6) 1)])
51
          (cond
52
            [(< num
53
                (* n6-1 n6-1))
54
             #t]
55
            [(zero? (mod num n6-1))
56
             #f]
57
            [(< num
58
                (* n6+1 n6+1))
59
             #t]
60
            [(zero? (mod num n6+1))
61
             #f]
62
            [else
63
              (loop (+ i 1))])))]))
64
65
(define (goldbach? num)
66
  (assume (exact-integer? num))
67
  (assume (<= 9 num))
68
  (let loop ([i 1])
69
    (let ([square-i*2 (* (* i i)
70
                         2)])
71
      (cond
72
        [(< num square-i*2) #f]
73
        [(prime? (- num
74
                    square-i*2))
75
         #t]
76
        [else
77
          (loop (+ i 1))]))))
78
79
(define goldbach-false-num
80
  (let loop ([i 35])
81
    (cond
82
      [(prime? i) (loop (+ i 2))]
83
      [(goldbach? i) (loop (+ i 2))]
84
      [else i])))
85
86
(define answer-46 goldbach-false-num)
87
88
(format #t "46: ~d~%" answer-46)
89
```