ふと素数かどうかを判断するメソッドなんてあるのかなと思って検索したけどC#には標準でそのようなものはないらしい。自作するとすればどのようにすればよいか?

簡単な方法

ただこの方法は無駄な部分が多すぎます。2で割り切れないものなら4とか8でも割り切れません。そこでループ内で割り切れるかどうかチェックするのは奇数だけで充分なはずです。

それから商をしらべて割ろうとしている数よりも小さくなってしまった場合、今後割り切れる数がみつかるとすれば商はそれよりも小さな値になるということになります。ということはもっと早く割り切れる数がみつからないとおかしいということになります。

さてlong型で一番大きな値は9,223,372,036,854,775,807です。922京3372兆0368億5477万5807は素数ではありません。ではこれより2小さい値は素数なのかというと違うようです。これよりも小さな値で最大のものは9,223,372,036,854,775,783です。

指定した以上の整数で素数を調べるプログラムを作成しました。時間がかかるので制限もつけます。9,223,372,036,854,775,783が素数であることを調べる処理には1分くらいかかります。

1から順番にチェックしていくのであれば1秒あれば10000件は簡単に処理できます。ファイルが大きくなりすぎないように10000件で処理を止めています。

ちなみに9,223,372,036,854,775,784以降の結果はこうなります。

9,223,372,036,854,775,784は素数ではない(2 で割り切れる)
9,223,372,036,854,775,785は素数ではない(3 で割り切れる)
9,223,372,036,854,775,786は素数ではない(2 で割り切れる)
9,223,372,036,854,775,787は素数ではない(13 で割り切れる)
9,223,372,036,854,775,788は素数ではない(2 で割り切れる)
9,223,372,036,854,775,789は素数ではない(11 で割り切れる)
9,223,372,036,854,775,790は素数ではない(2 で割り切れる)
9,223,372,036,854,775,791は素数ではない(3 で割り切れる)
9,223,372,036,854,775,792は素数ではない(2 で割り切れる)
9,223,372,036,854,775,793は素数ではない(7 で割り切れる)
9,223,372,036,854,775,794は素数ではない(2 で割り切れる)
9,223,372,036,854,775,795は素数ではない(5 で割り切れる)
9,223,372,036,854,775,796は素数ではない(2 で割り切れる)
9,223,372,036,854,775,797は素数ではない(3 で割り切れる)
9,223,372,036,854,775,798は素数ではない(2 で割り切れる)
9,223,372,036,854,775,799は素数ではない(17 で割り切れる)
9,223,372,036,854,775,800は素数ではない(2 で割り切れる)
9,223,372,036,854,775,801は素数ではない(157 で割り切れる)
9,223,372,036,854,775,802は素数ではない(2 で割り切れる)
9,223,372,036,854,775,803は素数ではない(3 で割り切れる)
9,223,372,036,854,775,804は素数ではない(2 で割り切れる)
9,223,372,036,854,775,805は素数ではない(5 で割り切れる)
9,223,372,036,854,775,806は素数ではない(2 で割り切れる)
9,223,372,036,854,775,807は素数ではない(7 で割り切れる)

それから9,223,372,036,854,775,783の前の素数は9,223,372,036,854,775,643です。このくらいの数になると100個以上素数ではない自然数が続くことも珍しくありません。また9,223,372,036,854,775,753は素数ではありません。266,416,229 で割り切れます。

あとこんな話もあります。素数が連続して1兆出てこないこともあります。