1、编程求10000之内的所有“完数”。所谓“完数”是指一个数恰好等于它的包括1在内的所有不同因子之和。例如,6是完数,因为6=1+2+3。
2、编程求所有的3位数素数,且该数是对称的。所谓“对称”是指还是一个数,倒过来还是该数。例如,375不是对称数,因为倒过来变成了573。
3、猴子吃桃问题。猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了1个。第2天早上又将剩下的桃子吃掉一半,又多吃了1个。以后每天早上都吃了前1天剩下的一半,再多吃1个,到第10天早上想再吃时见只剩下1个桃子了。试编程求,第1天共摘下多少桃子。
2、编程求所有的3位数素数,且该数是对称的。所谓“对称”是指还是一个数,倒过来还是该数。例如,375不是对称数,因为倒过来变成了573。
3、猴子吃桃问题。猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了1个。第2天早上又将剩下的桃子吃掉一半,又多吃了1个。以后每天早上都吃了前1天剩下的一半,再多吃1个,到第10天早上想再吃时见只剩下1个桃子了。试编程求,第1天共摘下多少桃子。
$result = [];
for ($i=3; $i <10001 ; $i++) { //不知道是否考虑1这种特殊情况,而2又明显不符合要求 所以从3开始
$arr = getFactor($i); //获取$i所有非1和本身因子
if($arr){ //如果arr不为空
if(array_sum($arr)+1==$i){ //判断和
$result[] = $i;
}
}
}
//获取所有除1和本身之外的所有因子
function getFactor($num){
$arr = [];
for ($i=2; $i < $num; $i++) { //不考虑因子为1的情况
if($i*$i>$num){ //尽量降低循环次数 (因为在$num/$m = $n 中假设$m为min($m,$n),$n最小等于$m,所以$m不会比√$num大)
break;
}elseif($num%$i==0){ //如果$i为$num的因子
$arr[] = $i;
if($num/$i!=$i){ //$num/$i 也是$num的因子 如果因子$i*$i != $num 则将$num/$i也赋值给$arr
$arr[] = $num/$i;
}
}
}
return $arr;
}var_export($result);//完数//3位数素数,且该数是对称的
$result1 = [];
for ($i=1; $i < 10; $i++) { //因为三位数第一位数字不为0所以从1开始
for ($j=0; $j < 10; $j++) { //三位数中间的数字可以取0-9
$num = (int)($i.$j.$i); //对称数
$arr = getFactor($num); //获取对称数中是否有除1以外的因子
if(!$arr){ //不存在则为质数
$result1[] = $num;
}
}
}
var_export($result1);1和2
for($i = 3; $i <= 10000; $i++) {
$sum = 0;
for($j = 3; $j <= $i; $j++) {
$sum += $j;
if($sum == $i) {
$arr[] = $i;
break;
}
}
} var_dump($arr);
for($i = 3; $i <= 10000; $i++) {
$sum = 0;
for($j = 1; $j <= $i; $j++) {
$sum += $j;
if($sum == $i) {
$arr[] = $i;
break;
}
}
}
var_dump($arr);