首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求线性方程组的解集?

求线性方程组的解集?
EN

Stack Overflow用户
提问于 2013-04-08 14:34:45
回答 5查看 738关注 0票数 1

我需要为这个方程找到所有可能的解决方案:

x+2y = Nx<100000y<100000

比如说,给定N=10

我在蟒蛇里这样做

代码语言:javascript
复制
for x in range(1,100000):
    for y in range(1,100000):
        if x + 2*y == 10:
             print x, y

我应该如何为速度优化这一点?我该怎么办?

本质上这是一个Language-Agnostic问题。C/C++回答也会有帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-08 15:40:36

Lefteris E的回答是走的路,

但我确实觉得y应该在[1,N/2]而不是[1,2*N]的范围内

解释:

代码语言:javascript
复制
x+2*y = N

//replace x with N-2*y
N-2*(y) + 2*y = N
N-2*(N/2) + 2*y = N
2*y = N

//therefore, when x=0, y is maximum, and y = N/2
y = N/2

所以现在你可以做:

代码语言:javascript
复制
for y in range(1,int(N/2)):
   x = N - (y<<1)
   print x, y
票数 0
EN

Stack Overflow用户

发布于 2013-04-08 14:37:49

如果是x+2y = N,那么y = (N-x)/2 (假设N-x是偶数)。您不需要在整个range(1,100000)中进行迭代

像这样(对于给定的N)

代码语言:javascript
复制
if (N % 2): x0 = 1
else: x0 = 0
for x in range(x0, min(x,100000), 2):
    print x, (N-x)/2

编辑:你必须小心N-x不会变成负值。这就是min应该做的

Leftris的答案实际上比我的要好,因为这些特殊情况是以一种优雅的方式处理的。

票数 5
EN

Stack Overflow用户

发布于 2013-04-08 14:45:49

我们可以在y的区域上迭代并计算x。同时考虑到x也有一个有限的范围,我们进一步将y的区域限制为1, N/2

代码语言:javascript
复制
x=N;
for y in range(1,N/2-1):
     x = x-2
     print x, y
  • 这只是循环N/2次(而不是50000次)。
  • 它甚至不做那些昂贵的乘法和除法
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15881909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档