PHP 7.4 判断素数需先排除小于2的数,对≥2的数仅试除至√n且跳过偶数(除2外),时间复杂度O(√n);批量求素数推荐埃氏筛法,高效生成2~n全部素数。

用 PHP 7.4 判断一个数是否为素数,核心是检查它是否只能被 1 和自身整除(且大于 1)。关键点在于:只需试除到 √n 即可,效率高;注意排除小于 2 的数(0、1、负数都不是素数)。
基础版:判断单个整数是否为素数
适用于命令行或简单网页调用,输入一个整数,输出 true 或 false。
<?php function isPrime(int $n): bool {
if ($n < 2) return false;
if ($n == 2) return true;
if ($n % 2 == 0) return false; // 排除偶数(除2外)
<pre class="brush:php;toolbar:false;">// 只需检查到 sqrt(n),且只试奇数
$limit = (int)sqrt($n);
for ($i = 3; $i <p>}</p><p>// 示例用法
var_dump(isPrime(17)); // true
var_dump(isPrime(25)); // false
var_dump(isPrime(2)); // true
var_dump(isPrime(1)); // false
?></p>
增强版:支持用户输入(CLI 或表单)
适合在终端运行或嵌入简单 HTML 表单中。自动过滤非数字输入,并提示错误。
<?php function isPrime(int $n): bool {
if ($n < 2) return false;
if ($n == 2) return true;
if ($n % 2 == 0) return false;
$limit = (int)sqrt($n);
for ($i = 3; $i <= $limit; $i += 2) {
if ($n % $i == 0) return false;
}
return true;
}
<p>// CLI 模式示例(运行 php prime.php 13)
if (php_sapi_name() === 'cli' && isset($argv[1])) {
$input = (int)$argv[1];
echo "$input 是" . (isPrime($input) ? "" : "不") . "素数\n";
}
// 网页表单示例(GET 方式)
elseif (isset($_GET['num']) && is_numeric($_GET['num'])) {
$num = (int)$_GET['num'];
$result = isPrime($num) ? '是素数' : '不是素数';
echo "<p><strong>$num</strong> $result</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img
src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="overflowclass">btpanel phpsite 宝塔面板PHP网站</a>
<p class="overflowclass">宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p>
</div>
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>";
}
?>
网页使用时,可加简单 HTML 表单:
批量判断:找出指定范围内的所有素数
使用埃氏筛法(Eratosthenes Sieve)更高效,适合生成 2~n 之间全部素数(PHP 7.4 支持短数组语法和类型声明)。
<?php function sieveOfEratosthenes(int $n): array {
if ($n < 2) return [];
<pre class="brush:php;toolbar:false;">$isPrime = array_fill(0, $n + 1, true);
$isPrime[0] = $isPrime[1] = false;
for ($i = 2; $i * $i <p>}</p><p>// 示例:获取 2 到 30 之间的所有素数
$primes = sieveOfEratosthenes(30);
echo implode(', ', $primes); // 输出:2, 3, 5, 7, 11, 13, 17, 19, 23, 29
?></p>
注意事项与优化提醒
- PHP 7.4 要求函数参数和返回值类型声明(如
int $n和: bool),提升健壮性 - 对大数(如 > 10⁶)做单次判断时,√n 循环已足够快;但频繁判断多个数,建议预生成素数表或用筛法
-
sqrt()返回 float,强制转(int)向下取整,不影响正确性(因 $i ≤ √n 即可覆盖所有可能因子) - 避免用
range(2, $n-1)遍历——时间复杂度 O(n),而 √n 版本是 O(√n),差距巨大
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










