我正在尝试使用PHP解决项目euler问题12但是它需要花费太多时间来处理。在解决以前的问题时,我遇到了类似PHP的处理问题,我不得不用C ++解决它们,只是为了测试我的方法是否正确。 我想知道我的方法是否有问题,或者我可以做些什么来快速处理。这是我的解决方案的代码,适用于具有360除数的三角形。问题的链接是http://projecteuler.net/problem=12,这是我的代码
<?php
set_time_limit(0);
ini_set('memory_limit', '1G');
$triangles = array(0);
$count = 1;
$numOfDivisiors = 0;
$lastTriangle = 0;
while($numOfDivisiors < 500){
$triangle = (int) $lastTriangle + (int) $count;
$factors = getFactors($triangle);
//$triangles[] = array('triangle' => $triangle, 'factors' => $factors, 'factorsCount' => count($factors));
$triangles[] = array('triangle' => $triangle, 'factorsCount' => count($factors));
$lastTriangle = $triangle;
$numOfDivisiors = count($factors);
$count++;
//echo '<pre>'; print_r(array('triangle' => $triangle, 'factorsCount' => count($factors), 'count' => $count)); echo '</pre>';
}
echo $numOfDivisiors; exit;
/**
for($i = 0 ; $i < 10 ; $i++){
}
**/
//echo '<pre>'; print_r($triangles); exit;
function getFactors($number){
$factors = array();
$break = false;
$count = 1;
while($break != true){
$remainder = $number % $count;
if($remainder == 0){
$factors[] = $count;
}
//echo $count." ".$number; exit;
if($count == $number){
$break = true;
}
$count++;
}
return $factors;
}
?>
答案 0 :(得分:1)
使用一些数学。
可以通过
生成三角形数字n(n + 1)/ 2
并且如果你能找到素数因子,将1加到它们的幂并乘以一起得到除数的数量。
我的PHP解决方案需要大约4秒钟,我想我也可以加快速度
答案 1 :(得分:0)
有几种方法可以加快解决方案的速度。我要指出的第一个问题如下:
如果a * b = c则两者 a和b是c
的因子a和b中的一个将&lt; =到c的平方根
这应该有助于加快您的解决方案