primes - 生成质数数组

优质
小牛编辑
127浏览
2023-12-01

使用 Eratosthenes 筛选法生成达到给定数的质数。

生成一个从 2 开始到给定数的数组。 使用 Array.filter() 过滤掉能被从 2 开始到给定数的任意值整除的数。

const primes = num => {
  let arr = Array.from({ length: num - 1 }).map((x, i) => i + 2),
    sqroot = Math.floor(Math.sqrt(num)),
    numsTillSqroot = Array.from({ length: sqroot - 1 }).map((x, i) => i + 2);
  numsTillSqroot.forEach(x => (arr = arr.filter(y => y % x !== 0 || y == x)));
  return arr;
};
primes(10); // [2,3,5,7]

注:

埃拉托斯特尼筛选法(希腊语:κόσκινον Ἐρατοσθένους,英语:sieve of Eratosthenes ),简称埃氏筛,是一种简单且年代久远的筛法,用来找出一定范围内所有的素数。所使用的原理是从2开始,将每个素数的各个倍数,标记成合数。一个素数的各个倍数,是一个差为此素数本身的等差数列。此为这个筛法和试除法不同的关键之处,后者是以素数来测试每个待测数能否被整除。埃拉托斯特尼筛法是列出所有小素数最有效的方法之一,其名字来自于古希腊数学家埃拉托斯特尼,并且被描述在尼科马库斯所著Introduction to Arithmetic中。-维基百科