素数判定

素数判定について

const sosuu = (num) => {
    const chk = [...Array(num).keys()].map(i=>{
        i++;
        return num % i === 0 ? 1 : 0
    });
    return chk.reduce((sum,value)=>sum+value) === 2 ? "素数" : "素数じゃない";
}

引数を1から順番に割り切れるか調べて、0か1の配列返す。
1と自分は絶対割り切れるから、配列の中身全部足して2だったら素数。違ったら素数じゃない。
いけてると思うけど、これ0を入れたらエラーなっちゃうね…。

const sosuu = (num) => [...Array(num).keys()]
    .map(i=>num % ++i === 0 ? 1 : 0)
    .filter(value=>value===1)
    .length === 2 ? "素数" : "素数じゃない";

別に全部足さなくても、filterかけて長さが2だったら素数か。こっちだとエラーは出ません!ついでに繋げてみた!以上!

2022-08-06

読み返してたらflatMap使えばよくない…?って思ったので追記。

const sosuu = (num) => [...Array(num).keys()]
    .flatMap(i => num % ++i === 0 ? i : [])
    .length === 2 ? "素数" : "素数じゃない";

一行減っただけ。flatMapの記事はまたいつか…。