【发布时间】:2016-01-28 21:59:42
【问题描述】:
我有一个简单的数学算法。它所做的只是接受一个输入并找到 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)
【问题讨论】:
-
Stack Overflow 不是集思广益算法的好平台。至少,为你的问题想一个更好的标题。
-
for j in range(i+1, n+1) 会剪掉合理比例的循环,并删除 if 语句的第二部分,因为它现在是多余的。
-
@MartijnPieters 你知道哪些网站更适合这样的问题吗?
-
尝试 CodeReview.StackExchange.com 或 Math.StackExchange.com。另请查看 Fermat's theorem 和 Pell's equation 了解有关该主题的一般工作。
-
我个人认为这里没问题。这是一个足够具体的问题,基本上是关于寻找更快的算法...How to Ask 页面确实明确表示“询问... [...] 软件算法。”有很多优化问题非常模糊等 - 但这似乎没问题。
标签: python python-3.x math optimization