1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| 思路: 线性筛法,记录质数的下标,质数*n (n>=2)的值也不是质数
代码: function getPrime($num) { if ($num < 2) { return []; } // 记录质数下标的数组 $isPrime = array_fill(0, $num, true); $isPrime[0] = $isPrime[1] = false; // 记录质数的数组 $primes = []; for ($i = 2; $i < $num; $i++) { if ($isPrime[$i]) { // 下标为true,记录质数 $primes[] = $i; }
foreach ($primes as $prime) { if ($i * $prime >= $num) { // 超过指定范围,break break; }
// 指定不为质数的下标 $isPrime[$prime * $i] = false; if ($i % $prime === 0) { // 防止重复设定质数下标 break; } } }
return $primes; }
|