php求前n个质数之和@TOC
求前n个质数之和
前段时间参加一个考试,要求使用php写出求前n个质数的和的算法。
代码如下
<?php
/**
* @param $n //这个表示几个数字的质数的和,即题目中的n
* @param $increase //循环次数,起始值是2,莫修改
* @param $count //循环质数的次数,起始值是0,莫修改
* @param $add_num //总数,起始值是0,莫修改
* @return mixed
* author fengyuan
* date 2020/8/28 1:53
*/
function calculate($n,$increase=2,$count=1,$add_num=0){
$flag_in=0;//标识能被符合的条件 1和它本身
$flag_out=1; //标识不符合的条件 除了1和其他数
for ($i=1;$i<=$increase;$i++){
if($i!=1&&$i!=$increase){
//满足1和它本身可以被整除的情况下,我们的flag_out会一直满足true的情况
$result=$increase%$i;
if(!$result){
$flag_out=0;
}
}else{
//满足除了1和它本身都不能够被整除的情况下,我们的flag_in一直都是0
$result=$increase%$i;
if($result){
$flag_in=1;
}
}
}
if($flag_out&&!$flag_in){
//是质数的情况
if($n==$count){
//当所需要的质数的个数满足了我们,我们则跳出该递归
$add_num=$add_num+$increase;
echo $add_num;
die();
}else{
//不满足的情况,我们继续进行递归,直到满足情况为止
$add_num=$add_num+$increase;
$count++;
$increase++;
calculate($n,$increase,$count,$add_num);
}
}else{
//不是质数的情况
$increase++;
calculate($n,$increase,$count,$add_num);
}
}
//调用函数执行
calculate(5);