🐦

数オリの問題でOpenAI o1 vs DeepSeek(R1)

2025/01/27に公開

はじめに

本記事では、現在話題沸騰中のDeepSeek(R1)について、OpenAI o1との精度比較を行います。
今回の検証には、個人的な思い入れのある数学オリンピック2016年度の問題を使用しました。
検証前は全12問を使って検証する予定でしたが、想像より両方とも正解率が低かったため、最初の4問のみで検証を終了しました。

検証

検証のプロンプトは以下です。

プロンプト
以下は日本語で書かれた数学の問題です。
ただし、文中に数式がある場合は、KATEX形式の数式を$記号一つ、または$記号二つで囲んだ形式で書かれています。

問題を解いてください。

{問題文}

早速、検証結果を見ていきましょう。

第1問

次の式を計算し、値を整数で答えよ。

\sqrt{\frac{11^4 + 100^4 + 111^4}{2}}

答: 11221

OpenAI o1の回答

次の式を計算します。

\sqrt{\frac{11^4 + 100^4 + 111^4}{2}}
  1. 各項を計算する

    • 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. それらの和を 2 で割る

    11^4 + 100^4 + 111^4 = 14641 + 100000000 + 151807041 = 251821682.

    \frac{251821682}{2} = 125910841.

  3. 平方根をとる

    \sqrt{125910841}.

    これはちょうど
    11221^2 = 125910841

    となるので、
    \sqrt{125910841} = 11221.

よって、答えは 11221 です。

DeepSeek(R1)の回答
\sqrt{\frac{11^4 + 100^4 + 111^4}{2}}
111^4 = (100 + 11)^4 = 100^4 + 4 \cdot 100^3 \cdot 11 + 6 \cdot 100^2 \cdot 11^2 + 4 \cdot 100 \cdot 11^3 + 11^4.

分子の式 11^4 + 100^4 + 111^4 に代入すると:

11^4 + 100^4 + \left(100^4 + 4 \cdot 100^3 \cdot 11 + 6 \cdot 100^2 \cdot 11^2 + 4 \cdot 100 \cdot 11^3 + 11^4\right).

整理すると:

2 \cdot 100^4 + 2 \cdot 11^4 + 4 \cdot 100^3 \cdot 11 + 6 \cdot 100^2 \cdot 11^2 + 4 \cdot 100 \cdot 11^3.

この式を因数分解するために、100^2 + 100 \cdot 11 + 11^2 の二乗を考えます:

(100^2 + 100 \cdot 11 + 11^2)^2 = 100^4 + 2 \cdot 100^3 \cdot 11 + 3 \cdot 100^2 \cdot 11^2 + 2 \cdot 100 \cdot 11^3 + 11^4.

これと分子の式を比較すると、係数が一致し、分子は 2 \cdot (100^2 + 100 \cdot 11 + 11^2)^2 と表せます。したがって:

\sqrt{\frac{2 \cdot (100^2 + 100 \cdot 11 + 11^2)^2}{2}} = 100^2 + 100 \cdot 11 + 11^2.

計算すると:

100^2 = 10000, \quad 100 \cdot 11 = 1100, \quad 11^2 = 121, \\ 10000 + 1100 + 121 = 11221.

答え

\boxed{11221}

OpenAI o1 DeepSeek(R1)
⚪︎ ⚪︎

第2問

1以上2016以下の整数のうち、20で割った余りが16で割った余りよりも小さいものはいくつあるか。

答: 600個

OpenAI o1の回答

次の問題を考えます。

1以上2016以下の整数nのうち、「nを20で割った余り」をr_{20}(n)、「nを16で割った余り」をr_{16}(n)としたとき、

r_{20}(n) < r_{16}(n)

をみたすものはいくつあるか。


ポイント

  • r_{20}(n)n \bmod 20(0〜19)。
  • r_{16}(n)n \bmod 16(0〜15)。
  • 条件は
    n \bmod 20 \;<\; n \bmod 16.
  • この条件を満たすかどうかは、n最小公倍数 80単位で区切って考えると周期的に繰り返されます。

なぜ 80 かというと、\mathrm{lcm}(20,16)=80 だからです。
すなわち、n を 80 で割ったあまり k = n \bmod 80(0 〜 79 のいずれか)だけで、条件が満たされるかどうかが決まります。


具体的な計算の流れ

  1. k = n \bmod 80 が 0 〜 79 の場合を調べる

それぞれについて
r_{20}(n) = k \bmod 20, \quad
r_{16}(n) = k \bmod 16
が成り立ちます。以下では、k \bmod 20 を「kを20で割った余り」、k \bmod 16 を「kを16で割った余り」と呼びます。

便利な書き換え

  • k を 20 で割った商を a(0,1,2,3 のいずれか)とし、あまりを b(0 〜 19)とすると
    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 ごとに b の範囲 [0..19] で調べます。


  1. a=0,1,2,3 の場合

(1) a=0

  • k = 20 \times 0 + b = b(つまり k 自体が 0〜19)。
  • (4a + b) \bmod 16 = b \bmod 16
    • b = 0\ldots15 のときは (4a+b)\bmod 16 = b。よって「b < b」は偽。
    • b = 16\ldots19 のときは (4a+b)\bmod 16 = b - 16(0〜3)。 すると「b < b-16」または「16〜19 < 0〜3」となり偽。

よって a=0 では 1つも条件を満たさない

(2) a=1

  • k = 20 \times 1 + b = 20 + bk=20\ldots39)。

  • (4 \cdot 1 + b) \bmod 16 = (4 + b) \bmod 16

    • b=0\ldots11 のとき 4+b \le 15 なので、そのまま 4+b
      b < 4+b」は常に真なので、b=0\ldots11 で 12 個該当。
    • b=12\ldots15 のとき 4+b=16\ldots19、これを16で割ると 0〜3。
      b < 0\ldots3」すなわち「12〜15 < 0〜3」は偽。
    • b=16\ldots19 のとき 4+b=20\ldots23、これを16で割ると 4〜7。
      16\ldots19 < 4\ldots7」は偽。

a=1 のときは 12 個が条件をみたす。

(3) a=2

  • k = 40 + bk=40\ldots59)。

  • (4\cdot2 + b) \bmod 16 = (8 + b) \bmod 16

    • b=0\ldots7 のとき 8+b \le 15
      b < 8+b」は真なので 8 個該当。
    • b=8\ldots15 なら 8+b=16\ldots23、16で割ると 0〜7。
      8\ldots15 < 0\ldots7」は偽。
    • b=16\ldots19 なら 8+b=24\ldots27、16で割ると 8〜11。
      16\ldots19 < 8\ldots11」は偽。

a=2 のときは 8 個

(4) a=3

  • k = 60 + bk=60\ldots79)。

  • (4\cdot3 + b) \bmod 16 = (12 + b) \bmod 16

    • b=0\ldots3 のとき 12+b \le 15
      b < 12+b」は真なので 4 個該当。
    • b=4\ldots19 なら 12+b \ge 16、16で割った結果は (12+b)-16 = b-4
      b < b-4」は偽。

a=3 のときは 4 個


  1. 0〜79 のうち条件を満たす個数
  • a=0 : 0個
  • a=1 : 12個
  • a=2 : 8個
  • a=3 : 4個

合計 0 + 12 + 8 + 4 = 24.

すなわち、「80 個のうち 24 個が条件を満たす」という周期構造になっています。


  1. 1 〜 2016 の範囲に拡張
  • まず 80 の倍数ごとに区切ると、2016 = 80 \times 25 + 16 となるので、

    • 1〜80, 81〜160, \dots, 1921〜2000 までの「ちょうど 80 個」のかたまりが 25 回繰り返し、
    • 最後に 2001〜2016 (16 個) が残ります。
  • 1〜80 のような各かたまり 80 個の中では、先ほどの計算どおり 24 個の整数が条件を満たします。

    よって、最初の 80 \times 25 = 2000 の部分で満たす個数は
    25 \times 24 = 600.

  • 残り 2001〜2016 (16 個) について調べる。
    ここで n \bmod 80 は 1, 2, 3, …, 16 となります。
    しかし先ほどの計算で分かるとおり、

    • 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. 結論

以上より、
\boxed{600}
が答え(条件を満たす個数)となります。

DeepSeek(R1)の回答

まず、問題を整理します。求めたいのは「1以上2016以下の整数のうち、20で割った余りが16で割った余りよりも小さいもの」の個数です。具体的には、整数nについて以下を判定します:

\text{条件: } \quad n \bmod{20} < n \bmod{16}

周期性の分析

16と20の最小公倍数は 80 です。つまり、nを80で割った余り(n \bmod{80})によって、n \bmod{20}n \bmod{16}の値が周期的に繰り返されます。したがって、1周期(80個)内で条件を満たす個数を求め、全体(2016個)に適用します。

1周期(1~80)内の条件を満たす個数

a = 0, 1, 2, \ldots, 79に対して、次の不等式を確認します:
a \bmod{20} < a \bmod{16}

  • a \bmod{20}の範囲: 0~19
  • a \bmod{16}の範囲: 0~15

特に、a \bmod{20} \geq 16の場合a \bmod{16}は最大15なので、不等式を満たしません。したがって、a \bmod{20} \leq 15の場合のみを考えます。

具体的な計算

a \bmod{20} = r_{20}(0 ≤ r_{20} ≤ 15)とし、r_{16} = a \bmod{16}とします。
条件は r_{20} < r_{16} です。この不等式が成り立つには、r_{16}r_{20}+1以上である必要があります。
しかし、a \equiv r_{20} \pmod{20}かつa \equiv r_{16} \pmod{16}を満たすaが存在するかどうかを確認する必要があります(中国剰余定理)。

周期内の個数の算出

r_{20}(0~15)に対し、r_{16}r_{20}+1以上15以下の範囲で、a \equiv r_{20} \pmod{20}かつa \equiv r_{16} \pmod{16}を満たすaが存在するかを調べます。
具体的には、連立合同式:

\begin{cases} a \equiv r_{20} \pmod{20} \\ a \equiv r_{16} \pmod{16} \end{cases}

が解を持つかどうかを確認します(解が存在する条件はr_{16} \equiv r_{20} \pmod{\gcd(20,16)} = \pmod{4})。

  • 解が存在する条件: r_{16} \equiv r_{20} \pmod{4}
  • 有効なr_{16}の範囲: r_{20}+1 \leq r_{16} \leq 15 かつ r_{16} \equiv r_{20} \pmod{4}

この条件を満たすr_{16}の個数を数えます。
例えば、r_{20} = 0の場合:

  • r_{16}は1以上15以下で、かつ0 mod 4 ≡ 0 → r_{16} \equiv 0 \pmod{4}
  • 有効なr_{16}: 4, 8, 12 → 3個

同様に各r_{20}について計算すると、総計 20個 の解が得られます(詳細な計算は後述)。

全体への適用

  • 周期数: 2016 \div 80 = 25周期(2000個)
  • 余りの部分: 2001~2016(16個)

周期部分の個数

1周期あたり20個なので、
25 \times 20 = 500

余りの部分の個数

2001~2016(16個)について同様に条件を確認します。
具体的には、a = 1, 2, \ldots, 16に対応し、この範囲で条件を満たす個数を数えます。
実際に計算すると、4個が条件を満たします。

最終的な答え

500 + 4 = \boxed{504}

補足: 1周期内の計算の詳細

r_{20}(0~15)に対し、有効なr_{16}の個数を計算します:

r_{20} 有効なr_{16}r_{20}+1 \leq r_{16} \leq 15 かつ r_{16} \equiv r_{20} \pmod{4} 個数
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

合計: 3 \times 4 + 2 \times 4 + 1 \times 4 = 12 + 8 + 4 = 24 → 誤り。
実際には、上記の表で合計は 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(半直線 ABDC の交点)
  • Q(半直線 BCED の交点)
  • R(半直線 CDFE の交点)
  • S(半直線 DEAF の交点)

に対して
\angle BPC = 50^\circ,\quad
\angle CQD = 45^\circ,\quad
\angle DRE = 40^\circ,\quad
\angle ESF = 35^\circ

と順に「5度ずつ小さく」なっていることがポイントです。

最後に求めるのは、別の交点Tにおける \angle BTC です。


結論だけ先に述べると

\boxed{30^\circ}

が答えとして知られています。


なぜ 30° になるのか(概略の考え方)

この種の問題は、実は「円に内接する六角形の辺や斜辺を延長したときにできる交点がつくる角度が、一定の“差”で並ぶ」ことで有名な一連の幾何パズルの一例です。典型的には

  1. まず示されている4つの角
    50^\circ,\;45^\circ,\;40^\circ,\;35^\circ
    が「各 5 度ずつ下がっていく」パターンである。

  2. つづいて求められる角 \angle BTC もその流れでさらに 5 度下がる形で
    30^\circ
    となる(実際そうなることを証明できる)。

もっと厳密には、たとえば「外部点 P から円周上の 2 組の点を見たときの角度は、“対応する弧の差” の半分になる」という定理(割線の定理)や、「円内接多角形の辺を延長したときにできる交点に関する一連の角度の和や差が一定になる」という事実を用いて、与えられた角度条件から順に弧の大きさの差(または和)をたどり、最後に \angle BTC を求めるというやり方をとります。

しかし本問題の数値設定はちょうど「5度刻み」でうまく繋がるようになっているため、最終的に
\angle BTC = 30^\circ
となるのが典型的な結末です。


まとめ

したがって、問題文にある

直線 BE と直線 CF の交点を T とするとき、\angle BTC の大きさを求めよ。

の答えは
\boxed{30^\circ}
となります。

DeepSeek(R1)の回答

答え
\boxed{30}

OpenAI o1 DeepSeek(R1)
× ×

第4問

11 \times 11 のマス目をマス目にそった 5 つの長方形に分割する。分割されてできた長方形のうちの 1 つが、もとのマス目の外周上に辺をもたないような分割方法は何通りあるか。ただし、回転や裏返しにより一致する分割方法も異なるものとして数える。

答: 32400通り

OpenAI o1の回答

問題を整理すると、以下のようになります。


問題の内容

  • 11\times 11 の正方形のマス目(以下「全体」と呼ぶ)を、マス目に沿って 5 つの長方形に分割する。
  • 得られた 5 つの長方形のうち1つが、「外周」に辺をもたない(=完全に内側にある)ような分割方法がいくつあるかを数える。
  • 回転や裏返し(反転)で重なるものも、別のものとして数える。

ここで「外周」とは、11\times 11 の最も外側の境界線のことです。すなわち

  • 上端(1 行目と 2 行目の間)
  • 下端(11 行目の下)
  • 左端(1 列目の左)
  • 右端(11 列目の右)

のいずれかに接している辺を「外周に辺をもつ」と言います。


結論

答えは 2025 通り になります。

以下、その理由を順を追って解説します。


ポイント

  1. 5 つの長方形に分割するには「ちょうど 4 本の切り分け線(格子線)を入れる」形ですが、その配置の仕方は多種多様に見えます。
  2. しかし「長方形のうち 1 つが完全に内側にある」=「外周と辺を共有しない長方形がちょうど 1 つ存在する」となると、実はその内側の長方形をひとつ決めると、残りの部分(外側の“環状”部分)は自動的に 4 つの長方形に分かれる、という形しかありません。
    • 内側長方形を“穴”としてくり抜いた残り(外側のリング状領域)を「さらに 4 つの長方形」に分けるには、上下左右の4本の「帯状の長方形」で埋め尽くすしかないためです。
    • もし他の分け方をしようとすると、外側領域が「L字型」「C字型」「U字型」などの形に分割される可能性が出ますが、それらは「長方形」ではありません。
  3. したがって、「1つだけ内側長方形がある 5 分割」は「内側長方形の位置と大きさの取り方」を数え上げれば、それがそのまま分割の数と一致します。

「内側長方形」の取り方を数える

条件

  • 内側長方形が“外周に辺をもたない”ためには、上端は少なくとも 2 行目と 3 行目の間より下、下端は 10 行目と 11 行目の間より上、左端は少なくとも 2 列目と 3 列目の間より右、右端は 10 列目と 11 列目の間より左、ということになります。

具体的には、内側長方形の行方向の取り方を

i \le j \quad (2 \le i \le 10,\; i \le j \le 10)

とし、列方向の取り方を

p \le q \quad (2 \le p \le 10,\; p \le q \le 10)

とパラメータで表すことができます。

  • ここで i は「内側長方形のの境界が何行目と何行目の間にあるか」を示し、j は「内側長方形のの境界」を示す(“i 行目から j 行目まで”を含むイメージ)。
  • 同様に、p は「左の境界」、q は「右の境界」を示す(“p 列目から q 列目まで”を含むイメージ)。
  • i \le j, p \le q であれば、少なくとも 1 マスの大きさ(1\times 1 以上)になります。

個数の計算

  • i は 2 〜 10 の 9 通り。
  • ある i に対して ji 〜 10 の (10-i+1) 通り。

よって行方向の取り方は

\sum_{i=2}^{10}\,(10 - i + 1) \;=\; \sum_{m=1}^{9} m \;=\; \frac{9 \times 10}{2} \;=\; 45.
  • 同様に列方向 (p,q) についても、ちょうど同じ計算で 45 通り。

従って、内側長方形の取り方は

45 \;\times\; 45 \;=\; 2025

通り。


その位置決めごとに 5 つの長方形が一意に決まる

上で決めた (i,j,p,q) による「内側長方形」がひとつ定まると、残りの外側部分は

  1. 上帯 : 行 1 〜 ( i-1 ) , 列 1 〜 11
  2. 下帯 : 行 ( j+1 ) 〜 11 , 列 1 〜 11
  3. 左帯 : 行 ij , 列 1 〜 ( p-1 )
  4. 右帯 : 行 ij , 列 ( q+1 ) 〜 11
  5. 内側長方形 : 行 ij , 列 pq

の 5 つにちょうど分割されます。
このとき、上帯・下帯・左帯・右帯 はいずれも外周に接しているので、「完全に内側にある長方形」は「いま選んだ 1 つだけ」となります。


他の分割の可能性は?

  • 「内側長方形が 2 つ以上ある」ような分割を考えると、外側部分が“2つの穴の空いたドーナツ状”になり、そこを 3 枚の長方形で埋める必要があります(合計で 5 枚なので)。
  • しかし 2 つの穴をもつ「環状部分」を 3 つのすべて長方形で埋めるのは不可能です。長方形同士のつながり方を考えると、どうしても L字型や C字型などが出てしまい、「長方形」ではなくなります。
  • したがって「5 枚の長方形に分割し、そのうち少なくとも 1 つが内側」という場合は、上記のように「ちょうど 1 つだけ内側」が必ず起こり、その形は上に述べた“中心長方形 + 外側4帯”の構造と一対一対応になります。

まとめ

以上により、

  1. 内側長方形をとりうる (i,j,p,q) は合計 2025 通り。
  2. その選び方ごとに、外側を帯状に 4 つの長方形に分ければ、ちょうど 5 つの長方形分割が一意に定まる。
  3. 回転・反転による同一視はしない(全部別カウント)という条件下では、重複なくすべて数え上げられる。

よって

\boxed{2025}

が求める分割方法の総数となります。

DeepSeek(R1)の回答

答え
\boxed{2025}

OpenAI o1 DeepSeek(R1)
× ×

結果

検証結果をまとめると、以下のようになりました。

問題番号 OpenAI o1 DeepSeek(R1)
1 ⚪︎ ⚪︎
2 ⚪︎ ×
3 × ×
4 × ×

OpenAI o1やDeepSeek(R1)には数学オリンピックの問題を解かせるのは難しいようです。特に図形の問題は、図を描く思考過程を経ていないためか、かなり思考放棄に近い回答が目立ちました。
また、双方が同様の誤答をしている点も気になります。

今後の更なる精度の発展に期待したいと思います。

mutex Official Tech Blog

Discussion