update.このプログラムの原型を書いたのは随分と昔のことです。当時素数を勉強したいと思って、このメビウス関数のコードを書いてみたのですが、数学の素養が欠けている僕には、このメビウス関数が一体何なのかが、イマイチわからない...でもせっかく書いたのだからとWebサイトに公開したのが約7年前。手直ししてここに再掲載することとします。メビウス関数メビウス関数の定義は、以下のようなものです。詳しくは、Wikipedia(メビウス関数)を参照してください。C#のコード上の定義を元に、1から100までのメビウス関数の値を求めるコードを書いてみました。4以上の整数から素数を列挙する。ふるい用の配列の下限、上限を求め、配列を確保する。ふるいに掛けられて残った値が素数。併せて、求まった素数は、primesリストに記憶していく。この素数が次にふるいに掛ける際に利用される。}}簡単な解説まず、Mebius関数の値を格納する配列を用意し、1で初期化。それから、エラトステネスのふるいと似たやり方で、2,4,6,8,10...3,6,9,12,15...5,15,20,25,30......の位置の要素に、-1を掛けていきます。-1の部分を求めます。2以上の数で、上記どれにも該当しなかいのはあり得ないので、配列のすべてにメビウス関数の値が設定されることになります。値を列挙するのはなく、整数nを与えると、メビウス関数の値が戻ってくるような、読み取り専用のインデクサを定義しました。範囲チェックはやってません。mebius[10];のようにして値を得ます。素数を求めるPrimesクラスは、ここで示したメソッドを元に、クラスとして定義しなおしたものです。実行結果の一部を掲載します。Pageで公開したものを加筆・修正したものです。upLoginユーザーは見つかりませんでした。