数オリの問題でOpenAI o1 vs DeepSeek(R1)
はじめに
本記事では、現在話題沸騰中のDeepSeek(R1)について、OpenAI o1との精度比較を行います。
今回の検証には、個人的な思い入れのある数学オリンピック2016年度の問題を使用しました。
検証前は全12問を使って検証する予定でしたが、想像より両方とも正解率が低かったため、最初の4問のみで検証を終了しました。
検証
検証のプロンプトは以下です。
以下は日本語で書かれた数学の問題です。
ただし、文中に数式がある場合は、KATEX形式の数式を$記号一つ、または$記号二つで囲んだ形式で書かれています。
問題を解いてください。
{問題文}
早速、検証結果を見ていきましょう。
第1問
次の式を計算し、値を整数で答えよ。
\sqrt{\frac{11^4 + 100^4 + 111^4}{2}}
答: 11221
OpenAI o1の回答
次の式を計算します。
-
各項を計算する
-
11^4
より、11^2 = 121 11^4 = 121^2 = 14641. -
100^4
より、100^2 = 10000 100^4 = 10000^2 = 100000000. -
111^4
より、111^2 = 12321 111^4 = 12321^2.
ここで を計算すると、12321 \times 12321
12321^2 = 151807041.
-
-
それらの和を 2 で割る
11^4 + 100^4 + 111^4 = 14641 + 100000000 + 151807041 = 251821682.
\frac{251821682}{2} = 125910841. -
平方根をとる
\sqrt{125910841}.
これはちょうど
11221^2 = 125910841
となるので、
\sqrt{125910841} = 11221.
よって、答えは
DeepSeek(R1)の回答
分子の式
整理すると:
この式を因数分解するために、
これと分子の式を比較すると、係数が一致し、分子は
計算すると:
答え
OpenAI o1 | DeepSeek(R1) |
---|---|
⚪︎ | ⚪︎ |
第2問
1以上2016以下の整数のうち、20で割った余りが16で割った余りよりも小さいものはいくつあるか。
答: 600個
OpenAI o1の回答
次の問題を考えます。
1以上2016以下の整数
のうち、「 n を20で割った余り」を n 、「 r_{20}(n) を16で割った余り」を n としたとき、 r_{16}(n) r_{20}(n) < r_{16}(n) をみたすものはいくつあるか。
ポイント
-
はr_{20}(n) (0〜19)。n \bmod 20 -
はr_{16}(n) (0〜15)。n \bmod 16 - 条件は
n \bmod 20 \;<\; n \bmod 16. - この条件を満たすかどうかは、
を最小公倍数 80単位で区切って考えると周期的に繰り返されます。n
なぜ 80 かというと、
すなわち、
具体的な計算の流れ
-
が 0 〜 79 の場合を調べるk = n \bmod 80
それぞれについて
が成り立ちます。以下では、
便利な書き換え
-
を 20 で割った商をk (0,1,2,3 のいずれか)とし、あまりをa (0 〜 19)とするとb
k = 20a + b \quad (0 \le a \le 3,\; 0 \le b \le 19). - このとき
k \bmod 20 = b, \quad
k \bmod 16 = (20a + b) \bmod 16. - ところで
なので20 \equiv 4 \pmod{16}
(20a + b) \bmod 16 = (4a + b) \bmod 16. - 条件は
b \;<\; (4a + b) \bmod 16.
各
-
の場合a=0,1,2,3
a=0
(1) -
(つまりk = 20 \times 0 + b = b 自体が 0〜19)。k -
。(4a + b) \bmod 16 = b \bmod 16 -
のときはb = 0\ldots15 。よって「(4a+b)\bmod 16 = b 」は偽。b < b -
のときはb = 16\ldots19 (0〜3)。 すると「(4a+b)\bmod 16 = b - 16 」または「16〜19 < 0〜3」となり偽。b < b-16
-
よって
a=1
(2) -
(k = 20 \times 1 + b = 20 + b )。k=20\ldots39 -
。(4 \cdot 1 + b) \bmod 16 = (4 + b) \bmod 16 -
のときb=0\ldots11 なので、そのまま4+b \le 15 。4+b
「 」は常に真なので、b < 4+b で 12 個該当。b=0\ldots11 -
のときb=12\ldots15 、これを16で割ると 0〜3。4+b=16\ldots19
「 」すなわち「12〜15 < 0〜3」は偽。b < 0\ldots3 -
のときb=16\ldots19 、これを16で割ると 4〜7。4+b=20\ldots23
「 」は偽。16\ldots19 < 4\ldots7
-
∴
a=2
(3) -
(k = 40 + b )。k=40\ldots59 -
。(4\cdot2 + b) \bmod 16 = (8 + b) \bmod 16 -
のときb=0\ldots7 。8+b \le 15
「 」は真なので 8 個該当。b < 8+b -
ならb=8\ldots15 、16で割ると 0〜7。8+b=16\ldots23
「 」は偽。8\ldots15 < 0\ldots7 -
ならb=16\ldots19 、16で割ると 8〜11。8+b=24\ldots27
「 」は偽。16\ldots19 < 8\ldots11
-
∴
a=3
(4) -
(k = 60 + b )。k=60\ldots79 -
。(4\cdot3 + b) \bmod 16 = (12 + b) \bmod 16 -
のときb=0\ldots3 。12+b \le 15
「 」は真なので 4 個該当。b < 12+b -
ならb=4\ldots19 、16で割った結果は12+b \ge 16 。(12+b)-16 = b-4
「 」は偽。b < b-4
-
∴
- 0〜79 のうち条件を満たす個数
-
: 0個a=0 -
: 12個a=1 -
: 8個a=2 -
: 4個a=3
合計
すなわち、「80 個のうち 24 個が条件を満たす」という周期構造になっています。
- 1 〜 2016 の範囲に拡張
-
まず 80 の倍数ごとに区切ると、
となるので、2016 = 80 \times 25 + 16 - 1〜80, 81〜160,
, 1921〜2000 までの「ちょうど 80 個」のかたまりが 25 回繰り返し、\dots - 最後に 2001〜2016 (16 個) が残ります。
- 1〜80, 81〜160,
-
1〜80 のような各かたまり 80 個の中では、先ほどの計算どおり 24 個の整数が条件を満たします。
よって、最初の
の部分で満たす個数は80 \times 25 = 2000
25 \times 24 = 600. -
残り 2001〜2016 (16 個) について調べる。
ここで は 1, 2, 3, …, 16 となります。n \bmod 80
しかし先ほどの計算で分かるとおり、-
の場合k=1\ldots15 ,k \bmod 20 = k なので「k \bmod 16 = k 」は偽。k < k -
の場合k=16 ,k \bmod 20 = 16 なので「k \bmod 16 = 0 」は偽。16 < 0
-
よって 1〜16 においては 1つも条件を満たさない。
5. 結論
以上より、
が答え(条件を満たす個数)となります。
DeepSeek(R1)の回答
まず、問題を整理します。求めたいのは「1以上2016以下の整数のうち、20で割った余りが16で割った余りよりも小さいもの」の個数です。具体的には、整数
周期性の分析
16と20の最小公倍数は 80 です。つまり、
1周期(1~80)内の条件を満たす個数
各
-
の範囲: 0~19a \bmod{20} -
の範囲: 0~15a \bmod{16}
特に、
具体的な計算
条件は
しかし、
周期内の個数の算出
各
具体的には、連立合同式:
が解を持つかどうかを確認します(解が存在する条件は
-
解が存在する条件:
r_{16} \equiv r_{20} \pmod{4} -
有効な
の範囲:r_{16} かつr_{20}+1 \leq r_{16} \leq 15 r_{16} \equiv r_{20} \pmod{4}
この条件を満たす
例えば、
-
は1以上15以下で、かつ0 mod 4 ≡ 0 →r_{16} r_{16} \equiv 0 \pmod{4} - 有効な
: 4, 8, 12 → 3個r_{16}
同様に各
全体への適用
-
周期数:
周期(2000個)2016 \div 80 = 25 - 余りの部分: 2001~2016(16個)
周期部分の個数
1周期あたり20個なので、
余りの部分の個数
2001~2016(16個)について同様に条件を確認します。
具体的には、
実際に計算すると、4個が条件を満たします。
最終的な答え
補足: 1周期内の計算の詳細
各
有効な |
個数 | |
---|---|---|
0 | 4, 8, 12 | 3 |
1 | 5, 9, 13 | 3 |
2 | 6, 10, 14 | 3 |
3 | 7, 11, 15 | 3 |
4 | 8, 12 | 2 |
5 | 9, 13 | 2 |
6 | 10, 14 | 2 |
7 | 11, 15 | 2 |
8 | 12 | 1 |
9 | 13 | 1 |
10 | 14 | 1 |
11 | 15 | 1 |
12 | (なし) | 0 |
13 | (なし) | 0 |
14 | (なし) | 0 |
15 | (なし) | 0 |
合計:
実際には、上記の表で合計は 20個 となります(計算ミス修正)。
OpenAI o1 | DeepSeek(R1) |
---|---|
⚪︎ | × |
第3問
円に内接する六角形 ABCDEF について、半直線 AB と半直線 DC の交点を P、半直線 BC と半直線 ED の交点を Q、半直線 CD と半直線 FE の交点を R、半直線 DE と半直線 AF の交点を S とすると、
\angle BPC = 50^\circ,\ \angle CQD = 45^\circ,\ \angle DRE = 40^\circ,\ \angle ESF = 35^\circ
であった。
直線 BE と直線 CF の交点を T とするとき、の大きさを求めよ。 \angle BTC
答: 95度
OpenAI o1の回答
以下のような角度追いの問題は「直接すべてを座標化して計算する」あるいは「外点からの割線(または弧)の公式を厳密に割り当てる」など、いろいろなやり方がありえますが、かなり煩雑になりがちです。実際には「円に内接する多角形の辺や対角線を延長してできる交点が作る角度の和」に関する定理や、「等差的に変化する角度が最終的にいくつになるか」というパターンを利用した“有名な”タイプの問題でもあります。
本問題では与えられる4つの交点
-
(半直線P とAB の交点)DC -
(半直線Q とBC の交点)ED -
(半直線R とCD の交点)FE -
(半直線S とDE の交点)AF
に対して
と順に「5度ずつ小さく」なっていることがポイントです。
最後に求めるのは、別の交点
結論だけ先に述べると
が答えとして知られています。
なぜ 30° になるのか(概略の考え方)
この種の問題は、実は「円に内接する六角形の辺や斜辺を延長したときにできる交点がつくる角度が、一定の“差”で並ぶ」ことで有名な一連の幾何パズルの一例です。典型的には
-
まず示されている4つの角
50^\circ,\;45^\circ,\;40^\circ,\;35^\circ
が「各 5 度ずつ下がっていく」パターンである。 -
つづいて求められる角
もその流れでさらに 5 度下がる形で\angle BTC
30^\circ
となる(実際そうなることを証明できる)。
もっと厳密には、たとえば「外部点
しかし本問題の数値設定はちょうど「5度刻み」でうまく繋がるようになっているため、最終的に
となるのが典型的な結末です。
まとめ
したがって、問題文にある
直線
と直線 BE の交点を CF とするとき、 T の大きさを求めよ。 \angle BTC
の答えは
となります。
DeepSeek(R1)の回答
答え
OpenAI o1 | DeepSeek(R1) |
---|---|
× | × |
第4問
のマス目をマス目にそった 5 つの長方形に分割する。分割されてできた長方形のうちの 1 つが、もとのマス目の外周上に辺をもたないような分割方法は何通りあるか。ただし、回転や裏返しにより一致する分割方法も異なるものとして数える。 11 \times 11
答: 32400通り
OpenAI o1の回答
問題を整理すると、以下のようになります。
問題の内容
-
の正方形のマス目(以下「全体」と呼ぶ)を、マス目に沿って 5 つの長方形に分割する。11\times 11 - 得られた 5 つの長方形のうち1つが、「外周」に辺をもたない(=完全に内側にある)ような分割方法がいくつあるかを数える。
- 回転や裏返し(反転)で重なるものも、別のものとして数える。
ここで「外周」とは、
- 上端(1 行目と 2 行目の間)
- 下端(11 行目の下)
- 左端(1 列目の左)
- 右端(11 列目の右)
のいずれかに接している辺を「外周に辺をもつ」と言います。
結論
答えは
以下、その理由を順を追って解説します。
ポイント
- 5 つの長方形に分割するには「ちょうど 4 本の切り分け線(格子線)を入れる」形ですが、その配置の仕方は多種多様に見えます。
- しかし「長方形のうち 1 つが完全に内側にある」=「外周と辺を共有しない長方形がちょうど 1 つ存在する」となると、実はその内側の長方形をひとつ決めると、残りの部分(外側の“環状”部分)は自動的に 4 つの長方形に分かれる、という形しかありません。
- 内側長方形を“穴”としてくり抜いた残り(外側のリング状領域)を「さらに 4 つの長方形」に分けるには、上下左右の4本の「帯状の長方形」で埋め尽くすしかないためです。
- もし他の分け方をしようとすると、外側領域が「L字型」「C字型」「U字型」などの形に分割される可能性が出ますが、それらは「長方形」ではありません。
- したがって、「1つだけ内側長方形がある 5 分割」は「内側長方形の位置と大きさの取り方」を数え上げれば、それがそのまま分割の数と一致します。
「内側長方形」の取り方を数える
条件
- 内側長方形が“外周に辺をもたない”ためには、上端は少なくとも 2 行目と 3 行目の間より下、下端は 10 行目と 11 行目の間より上、左端は少なくとも 2 列目と 3 列目の間より右、右端は 10 列目と 11 列目の間より左、ということになります。
具体的には、内側長方形の行方向の取り方を
とし、列方向の取り方を
とパラメータで表すことができます。
- ここで
は「内側長方形の上の境界が何行目と何行目の間にあるか」を示し、i は「内側長方形の下の境界」を示す(“j 行目からi 行目まで”を含むイメージ)。j - 同様に、
は「左の境界」、p は「右の境界」を示す(“q 列目からp 列目まで”を含むイメージ)。q -
,i \le j であれば、少なくとも 1 マスの大きさ(p \le q 以上)になります。1\times 1
個数の計算
-
は 2 〜 10 の 9 通り。i - ある
に対してi はj 〜 10 のi 通り。(10-i+1)
よって行方向の取り方は
- 同様に列方向
についても、ちょうど同じ計算で 45 通り。(p,q)
従って、内側長方形の取り方は
通り。
その位置決めごとに 5 つの長方形が一意に決まる
上で決めた
-
上帯 : 行 1 〜 (
) , 列 1 〜 11i-1 -
下帯 : 行 (
) 〜 11 , 列 1 〜 11j+1 -
左帯 : 行
〜i , 列 1 〜 (j )p-1 -
右帯 : 行
〜i , 列 (j ) 〜 11q+1 -
内側長方形 : 行
〜i , 列j 〜p q
の 5 つにちょうど分割されます。
このとき、上帯・下帯・左帯・右帯 はいずれも外周に接しているので、「完全に内側にある長方形」は「いま選んだ 1 つだけ」となります。
他の分割の可能性は?
- 「内側長方形が 2 つ以上ある」ような分割を考えると、外側部分が“2つの穴の空いたドーナツ状”になり、そこを 3 枚の長方形で埋める必要があります(合計で 5 枚なので)。
- しかし 2 つの穴をもつ「環状部分」を 3 つのすべて長方形で埋めるのは不可能です。長方形同士のつながり方を考えると、どうしても L字型や C字型などが出てしまい、「長方形」ではなくなります。
- したがって「5 枚の長方形に分割し、そのうち少なくとも 1 つが内側」という場合は、上記のように「ちょうど 1 つだけ内側」が必ず起こり、その形は上に述べた“中心長方形 + 外側4帯”の構造と一対一対応になります。
まとめ
以上により、
- 内側長方形をとりうる
は合計(i,j,p,q) 通り。2025 - その選び方ごとに、外側を帯状に 4 つの長方形に分ければ、ちょうど 5 つの長方形分割が一意に定まる。
- 回転・反転による同一視はしない(全部別カウント)という条件下では、重複なくすべて数え上げられる。
よって
が求める分割方法の総数となります。
DeepSeek(R1)の回答
答え
OpenAI o1 | DeepSeek(R1) |
---|---|
× | × |
結果
検証結果をまとめると、以下のようになりました。
問題番号 | OpenAI o1 | DeepSeek(R1) |
---|---|---|
1 | ⚪︎ | ⚪︎ |
2 | ⚪︎ | × |
3 | × | × |
4 | × | × |
OpenAI o1やDeepSeek(R1)には数学オリンピックの問題を解かせるのは難しいようです。特に図形の問題は、図を描く思考過程を経ていないためか、かなり思考放棄に近い回答が目立ちました。
また、双方が同様の誤答をしている点も気になります。
今後の更なる精度の発展に期待したいと思います。
Discussion