複天一流:どんな手を使ってでも問題解決を図るブログ

宮本武蔵の五輪書の教えに従い、どんな手を使ってでも問題解決を図るブログです(特に、科学、数学、工学の問題についてですが)

東大数学2024問題6 (part 9):gnuplotで見つけた格子点の確認

前回のあらすじ

東大入試問題の数学2024問題6の後半にとりかかった。まずは二次方程式の解が2つとも正となる条件について調べることにした。条件を満たす領域がわかり、数値的にいくつかの格子点を(手で)抜き出してみたら、次のような感じとなた。

赤点が条件を満たす格子点

これが果たして、素数を生み出すかどうか検算してみる。

判別式を計算してみる

ところで判別式は英語でDiscriminantというそうだ。だから$D=b^2-4ac$とDで表すのであろう。

さて、計算結果をじっと睨んで、手で抜き出した格子点をデータファイルにしてみた。これをpythonのプログラムに読み込ませて、判別式を計算し、ちゃんと素数が出てくるか調べてみたい。ということで、プログラム名はdiscriminant.pyとする。

import math

def discr(a,b):
    return a**2 - 4*(b-1)

while True:
    try:
        ab_data = input().split()
        a = int(ab_data[0])
        b = int(ab_data[1])
        d = discr(a,b)
        sqd = math.sqrt(d)
        if sqd.is_integer() == True:
            sol0 = (-a + sqd)/2.
            sol1 = (-a - sqd)/2.
            print(a,b,d,sqd.is_integer(),sol0,sol1)
    except EOFError:
        break
print("Programme completed...")

真ん中あたりにあるif文は、判別式が「平方数」になっているかを確認している。つまり、うまい具合に平方根が開けて、整数となれば、解が素数になる可能性が出てくるのである。もし平方根が開けなければ、解は「実数」になってしまって題意を満たすことはできない。その判定にis_integer()という関数を利用したというわけである。

さて、格子点の中でうまい具合に平方数になるものは意外にたくさんあって、全部で12個見つかった。

% python3 discriminant.py < ab-data.dat|cat -n
     1  -5 1 25 True 5.0 0.0
     2  -4 1 16 True 4.0 0.0
     3  -3 1 9 True 3.0 0.0
     4  -2 1 4 True 2.0 0.0
     5  -1 1 1 True 1.0 0.0
     6  0 1 0 True 0.0 0.0
     7  -2 2 0 True 1.0 1.0
     8  -3 3 1 True 2.0 1.0
     9  -4 4 4 True 3.0 1.0
    10  -4 5 0 True 2.0 2.0
    11  -5 5 9 True 4.0 1.0
    12  -5 7 1 True 3.0 2.0
    13  Programme completed...

右端の2つの整数が2次方程式の解であるが、これが素数となっているのは12番目のケースのみである。0や1は素数の定義により除外されるからである。つまり、我々の探索範囲で条件を満たしたのは、$(a,b)=(-5,7)$のときに発生する、$f(2)=2, f(3)=3$という2つの素数の解であった。

素数の解は4つあるだろうか?

さて、(a,b)=(-5,7)の場合、ケース3.により2つの解が見つかったことになる。果たして、この(a,b)に対し、ケース1.およびケース2.そしてケース4.は解を2つ提供できるだろうか?まずは似たような状況としてケース4.が2つの素数解を提供できるか確認してみよう。

この場合、$x=-p<0$に対して, $k(p)=p^2+5p+7=-1$とならねばならない。つまり、 \begin{equation} p^2+5p+8 =0 \end{equation} の解が素数になっていなくてはならないのだが、解の公式で解いてみると \begin{equation} p = \frac{-5\pm\sqrt{25-32}}{2} \end{equation} となってしまい、これは「複素数」である。実数ですらないので素数には到底なり得ないのは明らかである。ということで、あえなく唯一の望みは消えてしまったのである。

ケース4.がだめなら、ケース1.とケース2.を満たす素数が2つ見つかればよい。やってみると \begin{equation} k(1)=1-5+7 =3, \quad k(-1) = 1+5+7 =13 \end{equation} となった。$k(1)=3$はよいのだが、2次方程式の解の一つとしてすでに見つかっているため、「だぶり」である。もうひとつのケースについては$k(-1)=13$となってダメである。これはケース2.なので$k(-1)<0$とならなければならないからである。13は素数であるから、かなりいい線まで肉薄できたのだが、正負の関係で失敗である。ということで、今回候補となった(a,b)については、問題6の前半で見つけたような素数の解が3つあるケースではなく、素数の解が2つある場合に過ぎないことが確認された。