Project Euler

Project Euler 問題25までを分析する

Leonhard Euler

Project Euler の最初の25問を解くための考え方を紹介してきました。その25問について、難易度とその難しさについて考察します。

25問解くとレベル1になる。

Project Euler では、25問を解くとレベル1になります。

以下、2022年9月8日時点での情報です。

  • 1038012 人が、少なくとも1問解いている。
  • 1人あたり、平均 12.2 問正解している。
  • 123818 人(11.93%)が、25問以上正解している。

レベル1になると以下のアイコンが表示されます。

Level-1

もし、あなたが紹介した25問について解き方が理解できていれば、8人に1人以上の腕前だと考えてよいと思います。おめでとう!

問題を解いた人数

Project Euler では、アカウント作成直後から、すべての問題に挑戦することができます。そのため、すべての人が問1から解いているわけでありません。問題の取り組みやすさは、解いた人数に現れてきます。

以下は、最初の25問を解いた人数です(2022年9月8日時点)。

問題Noタイトル問題を解いた人数
13と5の倍数968976
2偶数のフィボナッチ数773136
3最大の素因数556518
4積となる最大の回文数492638
5最小の倍数495983
6和の2乗と2乗の和の差499028
710001番目の素数427317
8積の最大値358277
9特別なピタゴラス数363302
10素数の和333024
11マス目の最大の積239327
12多くの約数を持つ三角数225933
13大きな和231247
14最長のコラッツ数列231512
15格子状の道191141
16累乗の桁の和233740
17数字の文字数155224
18最大の経路和Ⅰ148600
19日曜日を数える138047
20階乗の桁の和202384
21友愛数149890
22名前スコア137907
23過剰数の和でない数107070
24辞書式順列117622
251000桁のフィボナッチ数159003

問1(3と5の倍数)は、取り組みやすい問題で、一番多くの人が解いています。問23(過剰数の和でない数)の正解者は、問1の約 1/9 になっています。

最初の25問を解くための難しさ

Project Euler の問題は、プログラミングとしての難しさを持つ場合と数学的な難しさを持つ場合があります。

以下は、最初の25問についてのコメントです。問題No は各問題を解く記事のリンクです(複数記事があるものは、最初の記事のリンクです)。なお、コメントは基本的なプログラムで解くためのコメントです。いくつかの記事で、応用的な考察も紹介していますが、その考察については以下のコメントの対象外にしました。

問題Noコメント
1基本的なプログラムが書ければ解けます。
2基本的なプログラムが書ければ解けます。
332bitを超える整数を使います。基本のアルゴリズムでも解けます。
410進数表記の仕組みが分かり、逆さの数を求めることができれば解けます。
5素因数分解と最小公倍数が理解できれば解けます。
6基本的なプログラムが書ければ解けます。
7素数の判定ができれば解けます。
81000桁の数字の入力が必要です。32bitを超える整数を使います。
9少し工夫が必要ですが、プログラムは基本的な文法で解けます。
10素数の判定ができれば解けます。32bitを超える整数を使います。
1120×20の数字の入力が必要です。プログラムは基本的な文法で解けます。
12約数を求める方法を工夫しないと時間がかかります。
13100個の50桁の数字の入力が必要です。多倍長整数の演算が必要です。
14問題は興味深いですが、プログラムは基本的な文法で解けます。
15場合の数を求める考え方はやや難しい。多倍長整数の演算が必要です。
16多倍長整数の演算が必要です。演算自体はそれほど難しくありません。
17ある程度のプログラムを正しくコーディングする技術が必要となります。
18bit全検索の考え方が必要となります。
19カレンダーに関係する演算を正確に行う必要があります。
20多倍長整数の演算が必要です。演算自体はそれほど難しくありません。
21約数を求める方法を工夫しないと時間がかかります(問題12と同様)。
22長い文字の行の入力が必要です。文字列の処理が必要になります。
23問題21のコメントに追加して、演算を一工夫する必要があります。
24ライブラリで順列の対応できていれば、解きやすい問題です。
25多倍長整数の演算が必要です。演算自体はそれほど難しくありません。

問題の難易度は、使うプログラミング言語によって差がでます。Python や Ruby のように整数の大きさに制限がない言語は、難易度が下がります。

逆に C や C++ で大きな整数を使う場合は、標準の機能に含まれていないライブラリを使う必要がでてくるため、難易度が上がります。このブログでは、64ビット整数を超えるような場合は、GMPライブラリを活用しました。

一部の問題で、高校数学の知識を使います。特に高校1年で履修する「整数」についての知識が必要な問題は複数ありました。

最初の10問については、この記事でもう少し詳しい考察をしています。

最後に

Project Euler の最初の25問について、以下の観点でまとめました。

  • どれくらいの人が解いているのか。
  • どのような難しさがあるのか。

よい問題が多く、自分でも新しく学ぶことが多かったです。次の25問(問題26から問題50)も、ぼちぼちと紹介していくことにします。目指せレベル2!

COMMENT

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

CAPTCHA