LoginSignup
4
2

More than 5 years have passed since last update.

素数判定をワンライナーで書いてみた(C#)

Last updated at Posted at 2016-07-05

初投稿です。

1~1000までの素数を列挙するコードをC#(LINQ)で書いてみました。

Console.Write(String.Join(",",Enumerable.Range(2,1000).Select(x=>Enumerable.Range(2,1000).Count(y=>x%y==0)<=1?x:2).Distinct().ToList()));

とりあえずパフォーマンスは無視
できるだけバイト数を少なくできるように頑張りました。
結果は137バイト(Console.Writeなしなら122バイト)

おそらく無駄がまだまだ多いと思います。
特にEnumerable.Range(2,1000)が2回出てくるのどうにかできないかな...

追記
ちょっと変えてみました
2回目のEnumerable.Range(2,1000)をEnumerable.Range(2,x)に変更

Console.Write(String.Join(",",Enumerable.Range(2,1000).Select(x=>Enumerable.Range(2,x).Count(y=>x%y==0)==1?x:2).Distinct().ToList()));

結果は134バイト(Console.Writeなしなら119バイト)

更に追記
@midori44 さんのおかげで109バイト(Console.Writeなしで94バイト!)まで短くなりました!

Console.Write(String.Join(",",Enumerable.Range(2,1000).Where(x=>Enumerable.Range(2,x).Count(y=>x%y==0)==1)));

横スクロールが出ない!w
そして自分の勉強不足を痛感しました...

更に更に追記
@muro さんのおかげで更に短くなりました!
結果は105バイト(Console.Writeなしで89バイト!)

Console.Write(String.Join(",",Enumerable.Range(2,999).Where(x=>Enumerable.Range(2,x-2).All(y=>x%y!=0))));

こんな拙い記事にコメントしてくれただけでなく、とてもわかり易い改善案、解説をしてくれたお二方には感謝の言葉しかありません。
思い切って投稿してみて良かったです!

4
2
3

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
4
2