我正在努力解决 Project Euler问题 23: Non-abundant sums。
我有一个脚本,可以计算丰富的数字:
function getSummOfDivisors( $number )
{
$divisors = array ();
for( $i = 1; $i < $number; $i ++ ) {
if ( $number % $i == 0 ) {
$divisors[] = $i;
}
}
return array_sum( $divisors );
}
$limit = 28123;
//$limit = 1000;
$matches = array();
$k = 0;
while( $k <= ( $limit/2 ) ) {
if ( $k < getSummOfDivisors( $k ) ) {
$matches[] = $k;
}
$k++;
}
echo '<pre>'; print_r( $matches );
我已经用互联网上的可用数字检查了这些数字,它们是正确的。我可以将它们乘以 2 并得到两个丰富数字之和的数字。
但是因为我需要找到所有不能这样写的数字,所以我只是if
像这样反转语句:
if ( $k >= getSummOfDivisors( $k ) )
这现在应该存储所有,不能创建为大量数字的总和,但这里没有退出。当我总结它们时,我得到一个甚至不接近正确答案的数字。
我不想看到答案,但我需要一些关于我做错了什么(或者我错过了什么或误解了什么)的指南/提示。
编辑:我也尝试了相反的顺序,意思是从顶部开始,除以 2 并检查这些是否丰富。结果还是错了。