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. '是素数';
}
本着不太负责的精神写出来了
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,'不是素数';
}
?>
$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;
}
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;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯