Python 如何优化算法,将数字分解为两个平方和?

Python 如何优化算法,将数字分解为两个平方和?,python,python-3.x,math,optimization,Python,Python 3.x,Math,Optimization,我有一个简单的数学算法。它所做的就是接受一个输入并找到i,j,这样i^2+j^2=input,限制j>=i,这样它就不会打印它的对应项,例如,2^2+3^2==3^2+2^2,但我只需要后者作为j>=i 对于我的代码,我做了以下操作:我有2个For循环,第一个循环用于I,第二个循环用于j。取i和j值,并测试i^2+j^2==输入和j>=i。如果是,打印并更新计数 问题是,对于大量的值,从1到2000再从1到2000循环两次需要很长的时间 def some_mathfn(n): count

我有一个简单的数学算法。它所做的就是接受一个输入并找到i,j,这样i^2+j^2=input,限制j>=i,这样它就不会打印它的对应项,例如,2^2+3^2==3^2+2^2,但我只需要后者作为j>=i

对于我的代码,我做了以下操作:我有2个For循环,第一个循环用于I,第二个循环用于j。取i和j值,并测试i^2+j^2==输入和j>=i。如果是,打印并更新计数

问题是,对于大量的值,从1到2000再从1到2000循环两次需要很长的时间

def some_mathfn(n):
    count = 0
    for i in range(1,n+1):
        for j in range(1,n+1):
            if(i**2 + j**2 == n and j >= i):
                g = print(i, '^2 + ', j,'^2')
                count += 1
    return count

some_mathfn(2001)
你有一个On2算法没有明显的原因。在1/2的时候做这个很容易

对于变量i,从1循环到n/2的平方根-因为当i大于sqrtn/2时,对于任何大于i的j,i*i+j*j都将大于n。 只有n的平方根,因为 减去i的平方 取结果的平方根,找到最接近的整数——称之为j 检查您感兴趣的条件是否成立
最后两个步骤实际上只是检查n-i*i的平方根实际上是一个整数,但在某些情况下,对于非常大的n值,找到最接近的整数,然后检查条件可能是更可靠的方法,以避免浮点限制导致问题,其中,与理论结果最接近的可表示双精度可以是整数,尽管实际结果不是整数。这只会发生在真正大的n值上,但是…

堆栈溢出不是头脑风暴算法的好平台。至少,为你的问题想出一个更好的标题。对于范围i+1中的j,n+1将删除一个合理的循环比例,并删除if语句中现在多余的第二部分。@MartijnPieters你知道哪些网站适合解决更多类似问题吗?请尝试CodeReview.StackExchange.com或Math.StackExchange.com。也可以查看和了解关于这个主题的一般工作。我个人认为这在这里是可以的。这是一个足够具体的问题,基本上是关于找到一个更快的算法。。。该页面确实明确指出询问有关。。。[…]软件算法。有很多优化问题是非常模糊的,等等-但这似乎没问题。@JonSkeet问题是范围不会浮动@米希科:所以四舍五入到最接近的整数。毕竟,您只关心整数值。。。