その他

ChatGPT で素数を判定させてみた

ChatGPT で素数について判定させました。その結果について紹介します。ChatGPT も進歩していくと予想しますが、2023年2月19日の結果です。

ChatGPTについて

2022年に発表されてから話題になっている ChatGPT でいろいろ遊んでいます。

ChatGPT に ChatGPT のことを聞いてみました。2023年2月19日のわたしの環境でのやりとりです。

「ChatGPT を説明してください。」に対する応答は以下でした。

WhatIsChatGPT

多くの方が紹介しているように驚くほど自然な応答をしています。

素数を判定させてみた

ChatGPT は言語処理を行いますが、数学自体は理解していないはずです。言語処理だけの能力でどれくらい大きい素数判定ができるか試してみました。

「97は素数ですか?」

Is97Prime

正しい応答をしています。

「997は素数ですか?」

Is997Prime

997は1000未満の素数では最大です。素数判定は正しく間違ってはいないですが、惜しい応答です。

いろいろな場合を試す

ここからは、テキストで紹介します。

「9973は素数ですか?」→ 素数と正しく応答しました。

「9987は素数ですか?」→ 9987は、3と3329を約数として持っているため、素数ではないと正しく応答しました。

「99991は素数ですか?」→ 素数と正しく応答しました。

「999983は素数ですか?」→ 素数と正しく応答しました。

「999987は素数ですか?」→ 999987は、3で割り切れるため素数ではないと正しく応答しました。

「9999991は素数ですか?」→ 素数と正しく応答しました。

「9999997は素数ですか?」→ 素数と応答したが、9999997 = 7 × 1428571 なので、正しい応答ではありません。

ChatGPT が学習したテキストに、試した数の同じようなやりとりが含まれているとは思えません。なにかの素数表をみているのかもしれません。また、999987が3で割り切れることは、「桁の合計が3で割り切れるなら、元の数も3で割り切れる」ことから分かりますが、ChatGPTがこの法則を理解できているとも思えません。

このあたりは、どこかで仕組みを知りたいと考えています。

検索して分かる素数を試す

最後に、最大の右切り捨て可能素数である73939133について聞いてみました。右切り捨て可能素数については、この記事で紹介しています。

Is73939133Prime1

73939133は素数ですが、27で割れるから素数ではないと誤った応答をしています。33=27なので、27で割り切れることと3で割り切れることは同値ですが、微妙に大きな値で応答してます。日を置いてもう一度試しました。

Is73939133Prime2

今日(2023年2月19日)試した結果です。平方根(正しい値は、8598.8…)も違うし、よく分からない大きな数を約数として挙げています。

73939133 は検索エンジンで検索すると、一番最初の結果で切り捨て可能な素数として出てきます。将来は、改善されるかもしれません。

素数判定するプログラムを出力する。

一方、ChatGPTは素数を判定するプログラムを正確に出力できます。

「素数を求めるプログラムをC++で書いてください。」で以下のプログラムを出力しました。※mainは微妙に正しく出力されておらず、関数isPrimeだけ紹介します。

bool isPrime(int num) {
    if (num <= 1) return false;
    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

効率が良いとは言えませんが、正しいプログラムを出力しています。

ChatGPTは、同じ質問に対して異なるプログラムを出力することがあります(というより同じプログラムを出力する方が少ない印象です)。以下のようなプログラムも出力しました。

bool isPrime(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    return true;
}

このプログラムは、与えられた数の平方根までしか調べていませんし(6行目)、5 以上の素数は、$6n \pm1$($n$: 自然数)になることを使っています。ChatGPTは、すでにあるプログラムをベースにしていると思われますが、感心する工夫です。

最後に

ChatGPT で素数について聞いてみました。言語モデルをベースにしていると理解していましたが、わたしの予想より大きな数を正しく素数判定できていました。

ChatGPT について、多くのホワイトカラーが危機感を持つべきだとの意見も聞こえてきます。ここ数年でさらに進歩する技術だと思われます。わたしはこの状況を楽しもうと考えています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA