21,886
社区成员
发帖
与我相关
我的任务
分享
$arr = array();
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);
$arr = array();
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);
//完数
$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