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;