微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

优化搜索除法器总和为整数的整数函数

如何解决优化搜索除法器总和为整数的整数函数

我有这个功能

function listSquared($m,$n)
{
    $result = [];
    $integers = range($m,$n);
    foreach($integers as $number){
        $divisors = [];
        $int_of_num = range(1,$number);
        foreach($int_of_num as $number2){
            if ($number % $number2 === 0) {
                $divisors[] = $number2;
            }
        }
        $result[] = $divisors;
    }
    $all_div = array_combine($integers,$result);
    $result_sum = [];
    foreach($all_div as $key => $value){
        $sum = 0;
        foreach($value as $num){
            $sum += $num ** 2;
        }
        $sqrt = sqrt($sum);
        if($sqrt == (int)$sqrt){
            $result_sum[] = [$key,$sum];
        }

    }

    return $result_sum;
}

效果很好,但执行起来需要很多时间。任何想法如何优化此代码?(使用记忆)

输出示例:

listSquared(1,250)

Array ( [0] => Array ( [0] => 1 [1] => 1 ) [1] => Array ( [0] => 42 [1] => 2500 ) [2] => Array ( [0] => 246 [1] => 84100 ) )

附言此函数搜索一个整数,其平方和的除法器将是一个整数。

解决方法

您可以加快过滤不能成为除数的数字,而不是尝试它们。如果一个数是奇数,则除数不能是偶数。正方形也一样。 这将使您的尝试次数减少 50%。

,

我找到了解决方案。如果您想优化您的代码,只需尝试将您的代码划分为函数以减少执行时间。

function listSquared($m,$n)
{
    
    $result = [];
    for ($i = $m; $i <= $n; $i++) {
        $sum = sumDivisorsSq($i);

        if (isSquare($sum)) {
            $result[] = [$i,$sum];
        }
    }
    

    return $result;
}

function isSquare($num){
    $s = sqrt($num);
    return $s == (int)$s;
}

function sumDivisorsSq($number){
    $sum = 0;

    for($i = 1; $i <= round(sqrt($number)); $i++){
        if($number % $i == 0){
            $sum += $i ** 2;
            $j = $number / $i;
            if ($i !== $j) {
                $sum += $j ** 2;
            }
        }
    }

    return $sum;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?