素数判定をワンライナーで書いてみた(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))));
こんな拙い記事にコメントしてくれただけでなく、とてもわかり易い改善案、解説をしてくれたお二方には感謝の言葉しかありません。
思い切って投稿してみて良かったです!
Author And Source
この問題について(素数判定をワンライナーで書いてみた(C#)), 我々は、より多くの情報をここで見つけました https://qiita.com/KeisukeKudo/items/5478f6b22e487bc8fa04著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .