Project Euler

Project Euler 最初の10問を分析する

Leonhard Euler

Project Euler が提供している問題を解くための考え方を紹介してきました。最初の10問を紹介できたので、その10問について、どのような知識があれば解くことができるのか分析しました。

問題を解いた人数

以下は、問題別の解いた人数です(2022年8月14日時点)。

問題No問題を解いた人数
1968869
2773012
3556367
4492493
5495838
6498866
7427162
8358119
9363154
10332872

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

2022年8月14日時点で、1問でも解いた人は、1037913人いました(この1問は、問題1とは限りません)。一方、10問解いた人は、329332人で、1問でも解いた人との比率は、31.73%でした。アカウント登録して、1問解いても、10問解く人は3分の1以下になるようです。

最初の10問を解くために必要なプログラミングの知識

わたしは、C でプログラミングをしましたが、以下は、他の手続き型のプログラミング言語でも同じようなことが当てはまります。

C言語の前提知識

以下の文法知識を前提として、各問題を解くために、追加でどのような文法知識が必要か洗い出しました。改善版、別解で利用した文法要素も含みます。

  • main 関数
  • 独自関数定義と呼び出し
  • 整数型変数の宣言、代入(=
  • 四則演算(+-*/)と余り(%
  • インクリメント演算子(++)とデクリメント演算子(--
  • 条件判断文(if 文、if – else 文)
  • 繰り返し(for 文 と while 文)
  • 等価演算子(==!=)、関係演算子(<<=>>=
  • 整数型変数の出力(stdio.h の #include と printf 関数)

問題別の追加要素

問題No問題を解くために必要な追加の C言語の文法要素
1論理OR演算子(||
代入演算子(+=
2代入演算子(+=
3unsignd long long int 型
typedef による型定義
マクロ定数の定義
scanf による入力
4なし
5unsignd long long int 型
typedef による型定義
break 文
代入演算子(*=
関数の再帰呼び出し
6代入演算子(+=
7limits.h(MAX_INT を参照)
マクロ定数の定義
break 文
配列
代入演算子(+=
論理AND演算子(&&
8unsignd long long int 型
typedef による型定義
文字列
文字列の連結
配列
数字の文字コード(文字としての数字から数への変換)
型のキャスト
continue 文
9マクロ定数の定義
10unsignd long long int 型
typedef による型定義
マクロ定数の定義
break 文
代入演算子(+=
型のキャスト
配列
マクロ関数の定義

わたしは、プログラムをなるべく平易に書くように努めていて、使う文法要素も絞っていたつもりでしたが、細かく調べてみると、多くの文法要素を使っていました。

そのプログラミング言語が定めている文法を可能な限り利用してプログラムを記述することと、よく知られている文法を使って平易に書くことのバランスを考えて、書き方を採用しているつもりです。これは次回の話題とさせてください。

最初の10問を解くために必要な数学的な知識

数学的な知識も洗い出してみましょう。自然数の概念と四則演算は前提知識とします。

問題No問題を解くために必要な数学の知識
1倍数の考え方
数列の和の公式(1から$N$の和)
2漸化式の考え方
フィボナッチ数列の定義
合同式の考え方(考察で利用)
3素数の定義
素因数分解
410進法の記法のしくみ(位取り記数法)
倍数の考え方
5倍数の考え方
素数の定義
最大公約数
ユークリッドの互除法
6数列の和の公式(1から$N$の和と2乗の公式)
7素数の定義
8なし(掛け算の知識があれば解ける)
9ピタゴラス数の性質
10素数の定義
エラトステネスの篩

高校数学の範囲の知識は必要ですが、多くは高校1年で履修する範囲です。Project Euler は数学的な要素が強い問題を提供していますが、数学の知識をそれほど必要としない問題もあることが分かります。

最後に

Project Euler の最初の10問について、以下を整理しました。

  • どれくらいプログラミングの知識が必要なのか
  • どれくらい数学の知識が必要なのか

C言語と数学について、どれくらいの知識があれば、プログラミングが書けるようになるのか、別の記事で考察します。

COMMENT

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

CAPTCHA