PHP函数检测素数
质数是一个正好有两个不同的数字除数的数字:1和它本身。因此,如果将数字11取为1或11,则只能将其除以得到整数。如果使用其他任何数字,则始终会找到一个分数。
以下函数使用一种称为试验除法的方法来检测数字是否为质数。
function is_prime($number)
{
//1不是素数
if ( $number == 1 ) {
return false;
}
//2是唯一的偶数
if ( $number == 2 ) {
return true;
}
//平方根算法加快了对更大质数的测试
$x = sqrt($number);
$x = floor($x);
for ( $i = 2 ; $i <= $x ; ++$i ) {
if ( $number % $i == 0 ) {
break;
}
}
if( $x == $i-1 ) {
return true;
} else {
return false;
}
}该函数首先检测数字是1(不是素数)还是2(素数)。这是所遵循规则的两个例外,必须在继续操作之前加以注意。该函数将数字除以小于或等于该数字平方根的所有数字。如果任何除法结果是整数,则原始数字不是质数。否则,这是一个黄金。
这是一个脚本示例,可查找0到1,000,000之间的所有素数。
$start = 0;
$end = 1000000;
for($i = $start; $i <= $end; $i++)
{
if(is_prime($i))
{
echo ''.$i.', ';
}
}显然,这需要一些时间才能运行!
另外,该函数仅在您要检查整数时有用,如果您的数字大于整数的最大值,PHP将使用浮点数来存储数字,这会导致误报。要在系统上查找整数的最大值,请使用以下代码。
echoPHP_INT_MAX;