見出し画像

4以上の偶数は2つの素数の和で書けることを確かめるマクロ

 本日は、就労移行支援事業所に行って参りまして、「4以上の偶数は2つの素数の和で書ける」ことを、小さい偶数の順から調べて、反例があったら止まるエクセルのマクロを書いて来ました。

 USBメモリで持って帰っていいという許可をもらったので、持って帰りました。

 これは、ゴールドバッハ予想と言われる未解決問題です。ですから、もしも反例が見つかったら世界的大発見になってしまいます(笑)。

 たとえば・・・

 4=2+2
 6=3+3
 8=3+5
10=3+7(10=5+5でもいいですね)
12=5+7

 みたいな感じで、4以上の偶数は2つの素数の和で書けるらしいです。知られている限りは。でも、「必ず書ける」と証明した人もいないみたいですので、未解決問題であるわけです。

 私のマクロは、始める数と終わる数を入力します。4以上2000以下みたいな感じで。それで、たとえば2000は、2000=3+1997だったりするので(小さい順から調べて、ひとつでも見つかったら次の計算に行きますのでこうなりますが)、よほどこの予想は正しいような気がしますが、でも、誰も証明した人はいないみたいなのですね。

 私は30年以上前の中学生時代にこれをプログラミングし、そして、ずっとのちの、5年前の41歳のときに再びプログラミングできて中学の自分に追いつきました。そして、きょう、vbaでも書けました。

(5年前、高校2年生の情報のプログラミングの授業で、これを書ける生徒さんはいませんでしたからね!これよりはるかにやさしい「入力された数未満の素数をすべて出力する」というプログラムを書いた生徒さんは、京大に現役合格しました。)

 以下に、恥ずかしいですけど、そのプログラムをさらしますね。

Sub ゴールドバッハ予想()
Dim a As Long
Dim b As Long

Dim i As Long
Dim j As Long
Dim p As Long
Dim q As Long
Dim n As Long
Dim m As Long
Dim s As Long
Dim i2 As Long
Dim n2 As Long
Do

  a = InputBox("いくつから始めますか。4以上の整数を入力してください。")

Loop Until a Mod 2 = 0 And a >= 4

Do

  b = InputBox("いくつまで調べますか。入力された数以下の整数まで調べます。")
Loop Until b >= a

Range("A1").Select

Do While a <= b

  Do While i <= a


    For i = 2 To a
      n = 0
      For j = 1 To i
        If i Mod j = 0 Then
          n = n + 1
        End If
      Next
      If n <= 2 Then
' ここは非常に想像通りのものが出た。ここまでは間違っていない
' ActiveCell = i
' ActiveCell.Offset(1).Activate
        p = i
      End If

' Next


' ActiveCell = p
' ActiveCell.Offset(1).Activate
      q = a - p
      n2 = 0

      For i2 = 1 To q
      If q Mod i2 = 0 Then
        n2 = n2 + 1
      End If
    Next
    If n2 <= 2 Then
      ActiveCell = a & "=" & p & "+" & q
      ActiveCell.Offset(1).Activate

      Exit Do

    End If



    Next
  Loop
  a = a + 2
Loop




End Sub
Sub すべて消す()
ActiveSheet.Cells.Clear

End Sub

 

この記事が気に入ったらサポートをしてみませんか?