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


初投稿です。

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))));

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