输出10000以内质数

2017-1-6 dingshangchao php开发

class Test{
    //输出特定数以内的所有质数方法1
    public function prime1($num = 100){
    	for($i=1;$i<=$num;$i++){
    		if($this->isPrime1($i)){
    			echo $i.',';
    		}
    	}
    }
    //输出特定数以内的所有质数方法2
    public function prime2($num = 100){
    	for($i=1;$i<=$num;$i++){
    		if($this->isPrime2($i)){
    			echo $i.',';
    		}
    	}
    }
    //输出特定数以内的所有质数方法3
    public function prime3($num = 100){
		$arr = $arr1 = array();
		for($i=2;$i<$num;$i++){
			$arr[$i] = $i;
		}
		for($i=2;$i<=sqrt($num);$i++){
			for($j=2;$j<=$num/$i;$j++){
				$arr1[] = $i*$j;
			}
		}
		return implode(array_diff($arr, $arr1),',');
	}
	//判断是否是质数方法1
    public function isPrime1($n) {//TurkHackTeam AVP production
	    if ($n <= 3) {
	        return $n > 1;
	    } else if ($n % 2 === 0 || $n % 3 === 0) {
	        return false;
	    } else {
	        for ($i = 5; $i * $i <= $n; $i += 6) {
	            if ($n % $i === 0 || $n % ($i + 2) === 0) {
	                return false;
	            }
	        }
	        return true;
	    }
	}
	//判断是否是质数方法2
    public function isPrime2($n) {//TurkHackTeam AVP production
    	$mark = $n>=2 ? 1 : 0 ;
    	for($i=2;$i<=sqrt($n);$i++){
    		if($n % $i == 0){
    			$mark = 0;
    		}
    	}
    	return $mark;
	}
}
运行后
1.prime1耗时35.114990234375毫秒
2.prime2耗时1602.5830078125毫秒
3.prime3耗时406.46215820312毫秒 

网站备案号:京ICP备11043289号-1 北京市公安局网络备案 海1101084571
版权所有 北京育灵童科技发展有限公司 Copyright © 2002-2024 www.elight.cn, All Rights Reserved