永发信息网

php判断一个数是否为素数

答案:4  悬赏:0  手机版
解决时间 2021-04-27 01:23
  • 提问者网友:浪荡绅士
  • 2021-04-26 10:33
php判断一个数是否为素数
最佳答案
  • 五星知识达人网友:迟山
  • 2021-04-26 11:54
check_ss(8);

function check_ss($num) {
for($i=2; $i < $num ; $i++) {
if($num % $i == 0) {
echo $num. '不是素数';
exit;
}
}

echo $num. '是素数';
}

本着不太负责的精神写出来了
全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-04-26 14:04
我能问下什么是素数吗?
  • 2楼网友:杯酒困英雄
  • 2021-04-26 12:39
$test = 12345; //待检测的数字

$check = TRUE;
$i = 2;
$n = floor( sqrt( $test ) );
while( $i < $n ){
if( $test % $i == 0 ){
$check = FALSE;
$i = $n;
}else{
$i += 1;
}
}

if( $check ){
echo $test,'是素数';
}else{
echo $test,'不是素数';
}

?>
  • 3楼网友:duile
  • 2021-04-26 12:21
function selectnum($num){
    for ($j = 2; $j < sqrt($num); $j++) {
        if ($num % $j == 0) {
            return false;
        }
    }
    return true;
}
判断是不是 素数 ,若 返回true 就是 素数,因为 若一个数能被整除,那肯定就不是素数!!!

加平方根验证(sqrt)的目的,是为了优化性能,因为:
如果它不是质数,那么它应该可以表示成两个非1非自身的数相乘。
而这两个数,必然有一个大于平方根一个小于平方根,或者两个都等于平方根。
下面是 获取 1000000 内 所有的 素数 ,在PHP7下 能做到2.3秒,  在5下 不到4秒!public function test()
{
    $start_time = microtime(true);
    set_time_limit(0);
    $num_max = 1000000;
    $arr = [] ;
    for ($i = 1;($i*6) <= $num_max; $i++) {
        $base=$i*6;
        $num=$base-1;
        $sta=$this->testnum($num);
        if ($sta) {
            $arr[$num]=1;
        }
        $num=$base+1;
        $sta=$this->testnum($num);
        if ($sta) {
            $arr[$num]=1;
        }
    }
    $end = microtime(true);
    $zong = $end -$start_time;
    echo '开始' . $start_time . '
' ;
    echo '结束' . $end . '
' ;
    echo '用时' . $zong  . '
';
    echo '共' . count($arr) . '个素数';
}
function testnum($num){
    for ($j = 2; $j < sqrt($num); $j++) {
        if ($num % $j == 0) {
            return false;
        }
    }
    return true;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯