GPT-4o と GPT-4 について数学的能力を Azure OpenAI Playground 上で検証してみた

## はじめに
OpenAI 社が米国時間の13日に最新の大規模言語モデル「GPT-4o」を発表し、大きな注目を集めています。「GPT-4o」は従来のモデルに比べて応答速度が向上しており、画像認識機能と音声認識機能も大幅にアップデートされています。この新モデルは、Microsoft Azureの「Azure OpenAI Playground」で一部のリージョンにおいてプレビュー版の利用が開始されています。

さて、公開されたデモ動画の中で特に注目すべきは、「GPT-4o」が数学の問題を解説するシーンです。従来の「GPT-4」では数学的タスクが苦手とされていましたが、「GPT-4o」ではこの点が大きく改善されています。（参考: https://www.youtube.com/watch?v=_nSmkyDNulk)

この記事では、「GPT-4o」を「Azure Open AI Playground」上で利用する方法と、同プラットフォーム上で行った数学的タスクの簡易検証結果について紹介します。

## プレイグラウンド上でのGPT-4oの利用方法について
1.米国西部 3または米国東部リージョンで Azure OpenAIのリソースを作成します。(既存のものでも可)
2.[GO to Azure OpenAI Studio]を選択し、Playground へアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699921/a29181fc-20f0-0d8e-269a-0dc9d459959d.png)

3.メインページ上で(以下画像の赤枠部分)を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699921/81c941b8-f300-cd6c-1adc-fd9fa0676a25.png)

また以下の点についてご注意ください。
- GPT-4o [early Access Playground]は現在、米国西部 3と米国東部のリソースでのみ利用可能で、サブスクリプションごと、10 リクエスト/5分に制限されています。
- Azure OpenAI サービスの不正行為の監視は、変更が承認された場合でも、すべての [early Access Playground] ユーザーに対して有効になります。デフォルトのコンテンツ フィルタは有効になっており、変更できません。
- GPT-4o は 2024/05/15現在,Azure OpenAI プレビュー モデルであり、現在はデプロイ/直接 API アクセスには使用できません。

詳細は以下のドキュメントを参照の上ご確認ください。
https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models#gpt-4o-and-gpt-4-turbo

## 検証の前提について
- Azureの米国東部リージョンに「Azure Open AI」のリソースを作成
- 検証に使用した質問は、以下の海外研究チームの論文から抜粋した数学的質問です。
    - https://arxiv.org/abs/2307.09009
- 利用モデルについては以下です。
    - gpt-4(0613)
    - gpt-4o
- 各質問について3回実施し、正答数と回答内容を確認しています。
    - 実際の論文内では数値や区間を変え、複数回実施することで精度の確認をしています。

## 検証1　素数判定
- 質問 :「17077は素数か？　ステップバイステップで考え、『はい』か『いいえ』で答えてください」
- 想定回答:「(計算ロジックなど)~結論は素数です。」

以下が結果です。
項目           | GPT-4o                                | GPT-4                               
----------------|--------------------------------------|--------------------------------------
正答数         | 3/3回                                 | 0/3回                                
回答の正確性   | 高い。各ステップで正確な計算を実行      | 低い。方針は正しいが、計算精度に問題    
計算過程の詳細さ | 各素数の割り算過程を詳細に説明          | 方針を最初に示すものの、過程が曖昧   
回答の一貫性   | 一貫して正しい計算方法を適用            | 各試行で異なる結果が出ることが多い       
効率性         | 効率的に計算を停止                      | 効率が低いケースが散見される          


回答の詳細は以下です。
GPT-4o
<details>
<summary>1回目</summary>
17077が素数かどうかを判断するために、17077の平方根を求めます。17077の平方根は約130.7です。したがって、130以下の素数で17077が割り切れるかどうかを確認します。
2で割り切れるか確認します。17077は奇数なので割り切れません。

次に3で割り切れるか確認します。17077の各桁の数字の合計は22で、3で割り切れないため、17077も3で割り切れません。

次に5で割り切れるか確認します。17077の末尾は7で、5で割り切れません。

次に7で割り切れるか確認します。17077を7で割ると、約2440.14となり、割り切れません。

次に11で割り切れるか確認します。17077を11で割ると、約1552.45となり、割り切れません。
次に13で割り切れるか確認します。17077を13で割ると、約1313.62となり、割り切れません。
次に17で割り切れるか確認します。17077を17で割ると、約1004.53となり、割り切れません。
次に19で割り切れるか確認します。17077を19で割ると、約898.26となり、割り切れません。
次に23で割り切れるか確認します。17077を23で割ると、約742.48となり、割り切れません。
次に29で割り切れるか確認します。17077を29で割ると、約588.86となり、割り切れません。
次に31で割り切れるか確認します。17077を31で割ると、約550.23となり、割り切れません。
次に37で割り切れるか確認します。17077を37で割ると、約461.54となり、割り切れません。
次に41で割り切れるか確認します。17077を41で割ると、約416.51となり、割り切れません。
次に43で割り切れるか確認します。17077を43で割ると、約397.14となり、割り切れません。
次に47で割り切れるか確認します。17077を47で割ると、約363.34となり、割り切れません。
次に53で割り切れるか確認します。17077を53で割ると、約322.21となり、割り切れません。
次に59で割り切れるか確認します。17077を59で割ると、約289.44となり、割り切れません。
次に61で割り切れるか確認します。17077を61で割ると、約279.95となり、割り切れません。
次に67で割り切れるか確認します。17077を67で割ると、約254.88となり、割り切れません。
次に71で割り切れるか確認します。17077を71で割ると、約240.51となり、割り切れません。
次に73で割り切れるか確認します。17077を73で割ると、約233.66となり、割り切れません。
次に79で割り切れるか確認します。17077を79で割ると、約215.77となり、割り切れません。
次に83で割り切れるか確認します。17077を83で割ると、約205.74となり、割り切れません。
次に89で割り切れるか確認します。17077を89で割ると、約191.76となり、割り切れません。
次に97で割り切れるか確認します。17077を97で割ると、約176.99となり、割り切れません。
次に101で割り切れるか確認します。17077を101で割ると、約168.08となり、割り切れません。
次に103で割り切れるか確認します。17077を103で割ると、約164.07となり、割り切れません。
次に107で割り切れるか確認します。17077を107で割ると、約157.94となり、割り切れません。
次に109で割り切れるか確認します。17077を109で割ると、約155.67となり、割り切れません。
次に113で割り切れるか確認します。17077を113で割ると、約150.99となり、割り切れません。
次に127で割り切れるか確認します。17077を127で割ると、約134.43となり、割り切れません。
次に131で割り切れるか確認します。17077を131で割ると、約130.36となり、割り切れません。
以上の結果から、17077はどの素数でも割り切れないため、素数であると判断できます。
答えは「はい」です。
</details>


<details>
<summary>2回目</summary>
まず、17077が素数であるかどうかを判断するために、17077の平方根を求めます。1707717077が素数かどうかを判断するために、17077が2より大きいか、そして2で割り切17077が素数かどうかを確認するためには、まず2から17077の平方根（約130.7）までのの平方根は約130.7です。したがって、2から130までの素数で割り切れるかどうかを確認します。
素数で割り切れるかを調べる必要があります。つまり、2、3、5、7、11、13、17、19、23、れるかどうかを確認します。17077は2で割り切れないので、2ではありません。

次に、17077が他の素数で2: 17077は偶数ではないので割り切れません。
3: 各桁の和は15であり、3で割り切れるので割り切29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97、101、103、107、109、割り切れるかどうかを確認します。素数で割り切れるかどうかを調べるために、17077の平方根である113、127のいずれかで割り切れるかを確認します。

17077をそれぞれの素数で割ってみると、どれません。
5: 末尾が7なので割り切れません。
7: 17077 ÷ 7 ≈ 2440.428約130.7までの素数（3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37れでも割り切れません。したがって、17077は素数です。

答えは「はい」です。
</details>

<details>
<summary>3回目</summary>
素数かどうかを確認するために、17077を2からその平方根にあたる数（約130.7）までの素数で割り切れるかを調べます。

まず、2で割り切れるか確認します。17077は奇数なので、2では割り切れません。

次に、3で割り切れるか確認します。17077の各桁の合計は1 + 7 + 0 + 7 + 7 = 22で、これは3で割り切れません。したがって、17077は3では割り切れません。

次に、5で割り切れるか確認します。17077の最後の桁は7で、5の倍数ではないため5では割り切れません。

次に、7で割り切れるか確認します。17077 ÷ 7 ≈ 2440.428571で、割り切れません。

次に、11で割り切れるか確認します。17077 ÷ 11 ≈ 1552.454545で、割り切れません。

このように、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97、101、103、107、109、113、127のような他の素数で割り切れるかどうかも確認していきます。

このすべての確認を行った結果、17077はどの素数でも割り切れませんでした。

したがって、17077は素数です。回答は「はい」です。


</details>




GPT-4
<details>
<summary>1回目</summary>
まず、素数とは1とその数自体以外の自然数では割り切れない正の整数です。よって、17077が素数であるか確認するには、2から17077の平方根（約130.67）までの数で17077を割ってみて、その余りが0になるかどうか確認します。

以下はステップバイステップの解説です：
2で割る：17077 ÷ 2 = 8538.5、余りがあります。
3で割る：17077 ÷ 3 = 5692.33、余りがあります。
4で割る：17077 ÷ 4 = 4269.25、余りがあります。
5で割る：17077 ÷ 5 = 3415.4、余りがあります。

これを130まで続けても余りが出るのであれば、17077は素数です。しかし、17077を7で割ったとき、17077 ÷ 7 = 2439、余りが0になります。

したがって、結論として、17077は素数ではありません。答えは「いいえ」です。
</details>

<details>
<summary>2回目</summary>
まず、素数は1とその数自身以外の自然数で割り切れない1より大きい自然数を指します。

次に、17077が素数かどうかを確認するためには、17077をそれより小さい自然数で割ってみることにより、それが他の数で割り切れるかどうかを確認します。ただし、すべての数を試す必要はありません。なぜなら、ある数nが素数でない場合、その約数は必ずnの平方根以下であるからです。したがって、17077の平方根（約130.67）以下のすべての自然数で17077を割ってみるだけで十分です。

そこで、2から130までの数で17077を割ってみます。例えば、2で割ると余りが1になりますので、2は約数ではありません。しかし、3で割ると余りが0になります。これは、17077が3で割り切れることを意味しています。

したがって、17077は素数ではありません。したがって、答えは『いいえ』です。
</details>

<details>
<summary>3回目</summary>
素数は1と自分自身以外で割り切れない正の整数を指します。つまり、その数が2以上であれば、2からその数の平方根までの数で割り切れなければ素数です。

17077の平方根は約130.68なので、2から130までの数で17077を割り切れるかを試します。

2で割ってみると、17077は奇数なので割り切れません。

次に3で割ってみると、17077÷3は約5692.3であり、割り切れません。

しかし、素数は偶数ではないので、2以外の偶数（4、6、8、...）で割る必要はありません。そのため、5,7,11,13,...といった奇数で割り切れるか試します。

これを130まで続けていきます。しかし、実際には計算機などを使ってすぐに計算できます。

その結果、17077は素数ではありません。なぜなら、17077は127と134の積（17077 = 127 * 134）であり、127と134以外にも割り切れる数があるからです。

したがって、答えは「いいえ」です。
</details>

## 検証2　ハッピー数判定
- 質問 : 3904以上3912以下の区間に何個のハッピー数がありますか？ステップバイステップで考えてから、何個あったかを教えて下さい。
- 想定回答 : 「(計算ロジック)~2個です」


＊ハッピー数とは各桁を分解し、2乗和を計算することを繰り返し、1になる数を指します。詳細は以下を参照してください
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%83%94%E3%83%BC%E6%95%B0

以下が結果です。
| 項目           | GPT-4o                                | GPT-4                                |
|----------------|--------------------------------------|--------------------------------------|
| 正答数         | 2/3回                                 | 0/3回                                |
| 回答の正確性   | 高い。ループパターンを認識し、正確に計算  | 低い。ループから抜け出せず、トークン数をオーバー |
| 計算過程の詳細さ | 各桁の平方和を詳細に示し、透明性を提供    | 方針を最初に示すが、過程が曖昧        |
| 回答の一貫性   | 一貫して正しい計算方法を適用              | 各試行で異なる結果が出ることが多い       |
| 効率性         | ループを認識して効率的に計算を停止        | 無限ループに陥り、効率が低いパターンが散見される           |


回答の詳細は以下です。

 GPT-4o
<details>
<summary>1回目</summary>
ハッピー数とは、各桁の数を2乗してその和を求めることを繰り返し、その結果が最終的に1になるような数のことを指します。それ以外はアンハッピー数と呼ばれます。

3904から3912までの数を順に調べていきましょう。
3904
3² + 9² + 0² + 4² = 9 + 81 + 0 + 16 = 106
1² + 0² + 6² = 1 + 0 + 36 = 37
3² + 7² = 9 + 49 = 58
5² + 8² = 25 + 64 = 89
8² + 9² = 64 + 81 = 145
1² + 4² + 5² = 1 + 16 + 25 = 42
4² + 2² = 16 + 4 = 20
2² + 0² = 4 + 0 = 4
4² = 16
1² + 6² = 1 + 36 = 37
（以下ループ）
3904はハッピー数ではありません。
3905
3² + 9² + 0² + 5² = 9 + 81 + 0 + 25 = 115
1² + 1² + 5² = 1 + 1 + 25 = 27
2² + 7² = 4 + 49 = 53
5² + 3² = 25 + 9 = 34
3² + 4² = 9 + 16 = 25
2² + 5² = 4 + 25 = 29
2² + 9² = 4 + 81 = 85
8² + 5² = 64 + 25 = 89
（以下ループ）
3905はハッピー数ではありません。
3906
3² + 9² + 0² + 6² = 9 + 81 + 0 + 36 = 126
1² + 2² + 6² = 1 + 4 + 36 = 41
4² + 1² = 16 + 1 = 17
1² + 7² = 1 + 49 = 50
5² + 0² = 25 + 0 = 25
2² + 5² = 4 + 25 = 29
2² + 9² = 4 + 81 = 85
8² + 5² = 64 + 25 = 89
（以下ループ）
3906はハッピー数ではありません。
3907
3² + 9² + 0² + 7² = 9 + 81 + 0 + 49 = 139
1² + 3² + 9² = 1 + 9 + 81 = 91
9² + 1² = 81 + 1 = 82
8² + 2² = 64 + 4 = 68
6² + 8² = 36 + 64 = 100
1² + 0² + 0² = 1 + 0 + 0 = 1
3907はハッピー数です。
3908
3² + 9² + 0² + 8² = 9 + 81 + 0 + 64 = 154
1² + 5² + 4² = 1 + 25 + 16 = 42
4² + 2² = 16 + 4 = 20
2² + 0² = 4 + 0 = 4
4² = 16
1² + 6² = 1 + 36 = 37
（以下ループ）
3908はハッピー数ではありません。
3909
3² + 9² + 0² + 9² = 9 + 81 + 0 + 81 = 171
1² + 7² + 1² = 1 + 49 + 1 = 51
5² + 1² = 25 + 1 = 26
2² + 6² = 4 + 36 = 40
4² + 0² = 16 + 0 = 16
1² + 6² = 1 + 36 = 37
（以下ループ）
3909はハッピー数ではありません。
3910
3² + 9² + 1² + 0² = 9 + 81 + 1 + 0 = 91
9² + 1² = 81 + 1 = 82
8² + 2² = 64 + 4 = 68
6² + 8² = 36 + 64 = 100
1² + 0² + 0² = 1 + 0 + 0 = 1
3910はハッピー数です。
3911
3² + 9² + 1² + 1² = 9 + 81 + 1 + 1 = 92
9² + 2² = 81 + 4 = 85
8² + 5² = 64 + 25 = 89
（以下ループ）
3911はハッピー数ではありません。
3912
3² + 9² + 1² + 2² = 9 + 81 + 1 + 4 = 95
9² + 5² = 81 + 25 = 106
1² + 0² + 6² = 1 + 0 + 36 = 37
（以下ループ）
3912はハッピー数ではありません。
以上から、3904 以上 3912 以下の区間にあるハッピー数は 2個 です
</details>

<details>
<summary>2回目</summary>
ハッピー数は、各位の数字の平方和を繰り返し求めた結果が1になる数です。例えば、19はハッピー数です。19の各位の数字の平方和を求めると、12 + 92 = 1 + 81 = 82です。さらに82の各位の数字の平方和を求めると、82 + 22 = 64 + 4 = 68です。同様に68から求めていくと、68 → 100 → 1となり、最終的に1になるので19はハッピー数です。

では、3904から3912までの範囲でハッピー数を探してみましょう。
3904の各位の数字の平方和を計算します：
32 + 92 + 02 + 42 = 9 + 81 + 0 + 16 = 106
106の平方和を計算します：
1^2 + 0^2 + 6^2 = 1 + 0 + 36 = 37
37の平方和を計算します：
32 + 72 = 9 + 49 = 58
58の平方和を計算します：
52 + 82 = 25 + 64 = 89
89の平方和を計算します：
82 + 92 = 64 + 81 = 145
145の平方和を計算します：
1^2 + 4^2 + 5^2 = 1 + 16 + 25 = 42
42の平方和を計算します：
42 + 22 = 16 + 4 = 20
20の平方和を計算します：
22 + 02 = 4 + 0 = 4
4の平方和を計算します：
4^2 = 16
16の平方和を計算します：
12 + 62 = 1 + 36 = 37
37は前に出てきた数なので、ループに戻ります。したがって、3904はハッピー数ではありません。
3905から3912まで同様の手順で計算します。

結果：3911だけがハッピー数です。
</details>

<details>
<summary>3回目</summary>
ハッピー数は、各桁の数字を2乗して足し合わせ、その結果を同様に繰り返していき、1になる数です。1にならない数は、同じ数字の繰り返しになり、1に達しません。

まずは、3904から3912までの数それぞれがハッピー数かどうかを判断します。
3904
3² + 9² + 0² + 4² = 9 + 81 + 0 + 16 = 106
1² + 0² + 6² = 1 + 0 + 36 = 37
3² + 7² = 9 + 49 = 58
5² + 8² = 25 + 64 = 89
8² + 9² = 64 + 81 = 145
1² + 4² + 5² = 1 + 16 + 25 = 42
4² + 2² = 16 + 4 = 20
2² + 0² = 4 + 0 = 4
4² = 16
1² + 6² = 1 + 36 = 37
37を繰り返すため、ハッピー数ではない
3905
3² + 9² + 0² + 5² = 9 + 81 + 0 + 25 = 115
1² + 1² + 5² = 1 + 1 + 25 = 27
2² + 7² = 4 + 49 = 53
5² + 3² = 25 + 9 = 34
3² + 4² = 9 + 16 = 25
2² + 5² = 4 + 25 = 29
2² + 9² = 4 + 81 = 85
8² + 5² = 64 + 25 = 89
89は繰り返しのため、ハッピー数ではない
3906
3² + 9² + 0² + 6² = 9 + 81 + 0 + 36 = 126
1² + 2² + 6² = 1 + 4 + 36 = 41
4² + 1² = 16 + 1 = 17
1² + 7² = 1 + 49 = 50
5² + 0² = 25 + 0 = 25
25は繰り返すため、ハッピー数ではない
3907
3² + 9² + 0² + 7² = 9 + 81 + 0 + 49 = 139
1² + 3² + 9² = 1 + 9 + 81 = 91
9² + 1² = 81 + 1 = 82
8² + 2² = 64 + 4 = 68
6² + 8² = 36 + 64 = 100
1² + 0² + 0² = 1
ハッピー数
3908
3² + 9² + 0² + 8² = 9 + 81 + 0 + 64 = 154
1² + 5² + 4² = 1 + 25 + 16 = 42
4² + 2² = 16 + 4 = 20
2² + 0² = 4 + 0 = 4
4² = 16
1² + 6² = 1 + 36 = 37
37は繰り返すため、ハッピー数ではない
3909
3² + 9² + 0² + 9² = 9 + 81 + 0 + 81 = 171
1² + 7² + 1² = 1 + 49 + 1 = 51
5² + 1² = 25 + 1 = 26
2² + 6² = 4 + 36 = 40
4² + 0² = 16 + 0 = 16
1² + 6² = 1 + 36 = 37
37は繰り返すため、ハッピー数ではない
3910
3² + 9² + 1² + 0² = 9 + 81 + 1 + 0 = 91
9² + 1² = 81 + 1 = 82
8² + 2² = 64 + 4 = 68
6² + 8² = 36 + 64 = 100
1² + 0² + 0² = 1
ハッピー数
3911
3² + 9² + 1² + 1² = 9 + 81 + 1 + 1 = 92
9² + 2² = 81 + 4 = 85
8² + 5² = 64 + 25 = 89
89は繰り返しのため、ハッピー数ではない
3912
3² + 9² + 1² + 2² = 9 + 81 + 1 + 4 = 95
9² + 5² = 81 + 25 = 106
1² + 0² + 6² = 1 + 0 + 36 = 37
37は繰り返すため、ハッピー数ではない

したがって、3904から3912までの区間にハッピー数は2つ（3907と3910）あります。
</details>

 GPT-4
<details>
<summary>1回目</summary>
ハッピー数は、その数の各桁の数字の平方和を新たに計算し、それを繰り返して行った結果、1に到達する整数のことを指します。例えば、19はハッピー数です。なぜなら、1^2 + 9^2 = 82、8^2 + 2^2 = 68、6^2 + 8^2 = 100、1^2 + 0^2 + 0^2 = 1となり、1に到達します。
それでは、3904から3912までのハッピー数を探してみましょう。
3904: 32 + 92 + 02 + 42 = 9 + 81 + 0 + 16 = 106 -> 12 + 02 + 62 = 1 + 0 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 92 = 64 + 81 = 145 -> 12 + 42 + 52 = 1 + 16 + 25 = 42 -> 42 + 22 = 16 + 4 = 20 -> 22 + 02 = 4 + 0 = 4 -> 42 = 16 -> 12 + 62 = 1 + 36 = 37 -> 32 + 72 = 9 + 49 = 58 -> 52 + 82 = 25 + 64 = 89 -> 82 + 9
</details>

<details>
<summary>2回目</summary>
ハッピー数とは、ある正の整数の各桁の数字を二乗し、それらを足し合わせて新たな数を生成し、この操作を繰り返したときに、最終的に1に到達する数を言います。例えば、19はハッピー数です。なぜなら、1^2 + 9^2 = 82、8^2 + 2^2 = 68、6^2 + 8^2 = 100、1^2 + 0^2 + 0^2 = 1となるからです。

それでは、3904から3912までの数について、それぞれがハッピー数かどうかを調べてみましょう。
3904: 3^2 + 9^2 + 0^2 + 4^2 = 9 + 81 + 0 + 16 = 106 → 1^2 + 0^2 + 6^2 = 1 + 0 + 36 = 37 → 3^2 + 7^2 = 9 + 49 = 58 → 5^2 + 8^2 = 25 + 64 = 89 → 8^2 + 9^2 = 64 + 81 = 145 → 1^2 + 4^2 + 5^2 = 1 + 16 + 25 = 42 → 4^2 + 2^2 = 16 + 4 = 20 → 2^2 + 0^2 = 4 + 0 = 4 → 4^2 = 16 → 1^2 + 6^2 = 1 + 36 = 37 → (37に戻ってきたので、これはハッピー数ではない)
3905: 同様に計算を進めると、ハッピー数ではないことがわかります。
3906: 同様に計算を進めると、ハッピー数ではないことがわかります。
3907: 同様に計算を進めると、ハッピー数ではないことがわかります。
3908: 同様に計算を進めると、ハッピー数ではないことがわかります。
3909: 同様に計算を進めると、ハッピー数ではないことがわかります。
3910: 同様に計算を進めると、ハッピー数ではないことがわかります。
3911: 同様に計算を進めると、ハッピー数ではないことがわかります。
3912: 同様に計算を進めると、ハッピー数ではないことがわかります。

したがって、3904から3912までの区間にはハッピー数は0個存在します。
</details>

<details>
<summary>3回目</summary>
ハッピー数とは、その数の各桁の数字の平方和を繰り返し計算した結果、最終的に1になる数のことを指します。では、指定された範囲内のハッピー数を見つけてみましょう。

3904から3912までの数値について、それぞれの各桁の数値の平方和を計算し、その結果が1になるかどうかを確認します。
3904 -> 32 + 92 + 02 + 42 = 9 + 81 + 0 + 16 = 106
3905 -> 32 + 92 + 02 + 52 = 9 + 81 + 0 + 25 = 115
3906 -> 32 + 92 + 02 + 62 = 9 + 81 + 0 + 36 = 126
3907 -> 32 + 92 + 02 + 72 = 9 + 81 + 0 + 49 = 139
3908 -> 32 + 92 + 02 + 82 = 9 + 81 + 0 + 64 = 154
3909 -> 32 + 92 + 02 + 92 = 9 + 81 + 0 + 81 = 171
3910 -> 32 + 92 + 12 + 02 = 9 + 81 + 1 + 0 = 91
3911 -> 32 + 92 + 12 + 12 = 9 + 81 + 1 + 1 = 92
3912 -> 32 + 92 + 12 + 22 = 9 + 81 + 1 + 4 = 95

上記の結果を見ると、3904から3912までの範囲内にハッピー数は存在しないことがわかります。
</details>


## まとめ
GPT-4とGPT-4oはどちらも問題解決のために前提を設定してから回答を導出しますが、細部の分析や計算の正確性においては、GPT-4oの方が顕著に向上しています。特に、倍数の性質を活用した計算やエラトステネスの篩を用いたロジックの導入は、その高度な思考能力を示している点で非常に印象的です。

## 終わりに
従来のGPT-4に比べて、数学的な能力も向上していると期待されます。社内データベースの分析や株価予測など、数学的処理を要するユースケースにおいて、この進化は大きな意味を持ちます。一般への提供が待ち遠しいですね。

プレビュー版ではありますが、Azure OpenAI Playground を通じて、セキュアな環境下でGPT-4oを迅速に試用することが可能です。この機会にぜひ多くの方にお試しいただきたいと思います。技術の進歩を肌で感じる絶好のチャンスです！