查找质数方法

<?php 

var_dump(isPrime(0,1225));
/**
 * [isPrime 求f范围内的质数]
 * @param  integer $small [范围最小值,默认0]
 * @param  integer  $big   [取值范围最大值]
 * @return array        [返回数组]
 */
function isPrime($small=0,$big){

	if($small < 0 || $big< 1 || $big <= $small){
		return 'error';
	}

	$array = array();  



	//创建一个数组,长度等于big, 默认值都是true
	for( $i=1;$i<= $big;$i++){
		 //小于2和能除2的下标 的 值 均为false
		 if($i < 2 || $i %2==0){
             $array[$i] =false;
		 }else{
             $array[$i] =true;
         }

	}

	/*
	*  解析说明:
	*  求能被x整数的数,  假设a乘以b等于x,  做则a和b 必有一个小于等于 x的平方根. 
	*  例如  36 分成4*9,6*6, 两个约数其中必有一个小于等于6  
	*  因此判断 x的约数,只需要除到 其平方根加1  如:查找36的约数,除到(6+1)即可  9不需要除,因为已经除以4
	*/

	//遍历所有的true,去掉能整除的 
	//第一个约数a: 从2开始,累加到(平方根+1)
	//第二个约数, 从2到  (big/a)+1
	//把a和b相乘的下标全部改成false
	$ulimit = sqrt($big) + 1;//最大值的平方根+1
	for($a=2; $a< $ulimit; $a++){
		if($array[$a]){  //去掉false
            //一个约数a,另一个就是$big/a,因此b的取值小于($big/a)+1
			$temp = ($big/$a)+1 ;  
			for($b=2;$b<$temp;$b++) 
			{
				$array[$a*$b] = false;
			}
		}
	}

	//定义返回的数组
	$return = array();
	//读取所有的true
	foreach ($array as $key => $value) {
		if($key > $small  && $value){
			$return[] =$key;
		}
	}

	return $return;

}





 ?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值