0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

理系修士卒が桜蔭文化祭の数学部の問題(2000年)に敗北した件について

Last updated at Posted at 2025-09-15

この問題なんとなく気になったのでやってみたのですが、一応理系修士卒にも関わらず普通に分からず2000年の中学生に25年の時を越え敗北してしまいました。

これ「中学生問題」と書いてあるので中学生が作成しているんですかね、恐るべし桜蔭生。私が中学生の時にこんなこと1mmも考えずにすごしてましたし、出身中学では数学部なんてものはなかったのもあって身近にこういったことに取り組んでいる人はいなかったですね。いくら平均的な生徒より数学に関心がある数学部とはいえ中学生の時点で素数式などに興味を持ってるのは相当すごいことだと思います。彼女達が大学でどの分野を専攻し現在どんなことをしているのかが少し気になりますね。

今回の問題は初見ではわからなったのでネットで簡単に調べて回答をまとめました。

問題文

以下問題文引用

<中学生問題>
Oin Fes. 2000

  1. 1と自身以外の数では割り切れない自然数を素数といいます。
    たとえば、2や2は1と自身以外の数では割り切れないので素数です。
    素数を得る一般式(素数式)は、多くの数学者によって研究されています。ある数学者は
    $f(n)=n^2+n+41$ ($n$は任意の自然数)
    を素数式であると主張しました。
    これは正しいでしょうか。
  2. いま、$2^4$を計算した数字のケタ数と、$5^4$を計算したケタ数の和を$2^4◯5^4$と表すこととすると、
    $2^4=16$, $5^4=625$より
    $2^4◯5^4=2+3=5$
    となる。
    $2^4◯5^4$の値を求めよ。また、その証明をせよ。

問1の回答

オイラーの素数生成多項式という有名な数式です。
この問題文ではオイラーの素数生成多項式が正しいかを聞いているが、証明はどうしたらいいかわからなった。

$n=1$から順番に調べていき$n=40$の時に素数でないことは、実際に自宅のパソコンを使えば一瞬で計算して調べることができる。ただ文化祭向けの問題のため中高生レベルの知識かつ手計算で出来る回答があると思うのですが分からない。

以下オイラーの素数生成多項式の解説ページ。

ちなみに大学は工学出身なのですが、解説ページの類数や虚二次体あたりは普通に知らないです。
数学科あたりではやっているんですかね。

以下引用。

$f_q(n)=n^2+n+q$
$q=2,3,5,11,17,41$ のとき,連続する$q−1$個の整数$n=0,1,2,⋯,q−2$に対して、$f_q(n)$はすべて素数である.

$f(n)=n^2+n+41$の場合、
$q-2=41-2=39$となるため$n=39$までは素数が出てくる。
$n=40$の場合は、
$f(40)=40^2+40+41=16000+40+41+1681=41^2$
と素数でないことが確認できる。

問1の回答(C言語による力技)

C言語による力技で計算させる。
単純にオイラーの素数生成多項式が正しいかどうかしか聞いていないので、ひたすら計算して$n=40$以降素数でない数字が出てくることが確認するという荒技がある。

以下を参考にソースコードを書いて実行した。
コンピュータを使えばこの程度は一瞬で計算できる。

以下ソースコード及びそれをコンパイルして実行した結果。

ソースコード

#include <stdio.h>
#include <math.h>
// 素数判定関数
int isPrime(int number)
{
    if (number <= 1)
        return 0; // 1以下は素数ではない
    for (int i = 2; i <= sqrt(number); i++)
    {
        if (number % i == 0)
            return 0; // 割り切れる場合は素数ではない
    }
    return 1; // 素数である
}
int main()
{
    int loop;
    printf("ループ回数を入力してください: ");
    scanf("%d", &loop);

    for (int n = 1; n <= loop; n++)
    {
        if (!isPrime(n * n + n + 41))
        {
            printf("n=%dの場合%dは素数ではありません。\n", n, n * n + n + 41);
        }
    }
}

コンパイルのためのコマンド

-fexec-charset=CP932をつけないと何故か文字化けする。
文字化けする場合はオプションでつけておくのをおすすめする。

gcc -o test test.c -fexec-charset=CP932

実行結果

> ./test
ループ回数を入力してください: 100
n=40の場合1681は素数ではありません。
n=41の場合1763は素数ではありません。
n=44の場合2021は素数ではありません。
n=49の場合2491は素数ではありません。
n=56の場合3233は素数ではありません。
n=65の場合4331は素数ではありません。
n=76の場合5893は素数ではありません。
n=81の場合6683は素数ではありません。
n=82の場合6847は素数ではありません。
n=84の場合7181は素数ではありません。
n=87の場合7697は素数ではありません。
n=89の場合8051は素数ではありません。
n=91の場合8413は素数ではありません。
n=96の場合9353は素数ではありません。

問2の回答

こちらは常用対数を用いると$2000$桁といい感じの数字が出てきたので多分答えはあっているはず。
ただ「中学生問題」とあるのにも関わらず高校の範囲である常用対数を使うのは桜蔭ルールではOKなのかはどうかまでは不明。

数字の桁数がわかれば良いため、
常用対数を用いる。

累乗の約数
$\log_a(x^n)=n\log_a(x)$
参照URL:
https://manabitimes.jp/math/2046

$\log_{10}2^{2000} =2000\log_{10}{2}$

常用対数表より、
$\log_{10}{2} \fallingdotseq 0.3010$、$\log_{10}{5} \fallingdotseq 0.6990$
常用対数表URL:
https://mathtext.info/blog/wp-content/uploads/2021/05/log10.pdf

$\log_{10}{2} \fallingdotseq 0.3010$を用いると
$\log_{10}2^{2000} =2000\times 0.3010 = 602.0$

【常用対数と桁数】
$x$が$n$桁の数ならば、
$10^n-1 \le x < 10^n$
参照URL:
https://hs-math.komaro.net/taisu-ketasuu/

$10^{601} \le 2^{2000} < 10^{602}$
よって、$2^{2000}$の桁数は$602$桁。

$5^{2000}$も同様に考えると、
$\log_{10}5^{2000}=2000\log_{10}{5} \fallingdotseq 2000 \times 0.6990 = 1398.0$
$10^{1397} \le 5^{2000} < 10^{1398}$
よって$5^{2000}$の桁数は$1398$桁。

以上より、
$2^4◯5^4=602+1398=2000$
$2^{2000}$を計算した数字のケタ数と、$5^{2000}$を計算したケタ数の和は$2000$桁。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?