C++ 寻找线性方程的解集?

C++ 寻找线性方程的解集?,c++,python,c,algorithm,math,C++,Python,C,Algorithm,Math,我需要找到这个方程的所有可能的解: x+2y=N,x如果x+2y=N,那么y=N-x/2假设N-x是偶数。您不需要在1100000范围内进行迭代 对于给定的N,像这样 if (N % 2): x0 = 1 else: x0 = 0 for x in range(x0, min(x,100000), 2): print x, (N-x)/2 编辑: 你必须注意N-x不会变成负值。这就是明应该做的 Leftris的答案实际上比我的好,因为这些特殊情况都以优雅的方式处理如果x+2y=N,那么

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

x+2y=N,x如果x+2y=N,那么y=N-x/2假设N-x是偶数。您不需要在1100000范围内进行迭代

对于给定的N,像这样

if (N % 2): x0 = 1
else: x0 = 0
for x in range(x0, min(x,100000), 2):
    print x, (N-x)/2
编辑: 你必须注意N-x不会变成负值。这就是明应该做的

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

如果x+2y=N,那么y=N-x/2假设N-x是偶数。您不需要在1100000范围内进行迭代

对于给定的N,像这样

if (N % 2): x0 = 1
else: x0 = 0
for x in range(x0, min(x,100000), 2):
    print x, (N-x)/2
编辑: 你必须注意N-x不会变成负值。这就是明应该做的


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

这在二次时间内运行。通过将方程重新排列为y=…,可以将其简化为线性时间。。。。这允许您仅在x上循环,计算y,并检查它是否为整数。

这以二次时间运行。通过将方程重新排列为y=…,可以将其简化为线性时间。。。。这允许您仅循环x,计算y,并检查它是否为整数。

您可以尝试只检查给定N=10的x的偶数; 原因是:2y必须是偶数,因此x必须是偶数。这将使总运行时间减少到检查所有x的一半


如果你还要求答案是自然数,那么负数就被排除了。然后,您只需要检查x的偶数介于[0,10]之间,因为x和2y单独不得大于10。

您可以尝试只检查给定N=10的x的偶数; 原因是:2y必须是偶数,因此x必须是偶数。这将使总运行时间减少到检查所有x的一半


如果你还要求答案是自然数,那么负数就被排除了。然后,您只需要检查x的偶数介于[0,10]之间的数字,因为x和2y不能单独大于10。

我们可以在y的域上迭代并计算x。同时考虑到x也有一个有限的范围,我们进一步将y的域限制为[1,N/2],因为任何超过N/2的y都会给x带来负值

x=N;
for y in range(1,N/2-1):
     x = x-2
     print x, y
这只是循环N/2次,而不是50000次 它甚至不做那些昂贵的乘法和除法
我们可以在y的域上迭代并计算x。同时考虑到x也有一个有限的范围,我们进一步将y的域限制为[1,N/2],因为任何超过N/2的y都会给x带来负值

x=N;
for y in range(1,N/2-1):
     x = x-2
     print x, y
这只是循环N/2次,而不是50000次 它甚至不做那些昂贵的乘法和除法 答案是要走的路

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

说明:

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
现在你可以做:

for y in range(1,int(N/2)):
   x = N - (y<<1)
   print x, y
答案是要走的路

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

说明:

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
现在你可以做:

for y in range(1,int(N/2)):
   x = N - (y<<1)
   print x, y

你是否要求答案是一个自然数?根据什么标准进行优化?正确吗?可读性?可重用性?优化速度。你是否要求答案是一个自然数?根据什么标准进行优化?正确吗?可读性?可重复使用性?优化速度。你能用一点额外的解释来更新这个答案吗?有点不完全明白。很抱歉给您添麻烦。请您在更新这个答案的同时再做一点解释,好吗?有点不完全明白。很抱歉给您添麻烦。我认为这是现有的最快的解决方案,而且仍然很优雅。是否可以进行进一步的优化不应该在范围[1,N/2 ]吗?我不知道关于Python,但是在C++中,使用位移位只会混淆。这不会使程序更快。事实上,如果它在Python中对速度产生了可测量的影响,我也会感到惊讶。事实上,我原本有N/2:p。是的,可以进一步优化。如果注意到循环中的x总是递减2。你可以先设置x=N,然后在循环中只做x=x-2,这样就不用再进行乘法运算了。我认为这是现有的最快的解决方案,而且仍然很优雅。有可能做进一步的优化吗不应该在范围[1,N/2 ]吗?我不知道关于Python,但是在C++中,使用位移位只会混淆。这不会使程序更快。事实上,如果它在Python中对速度产生了可测量的影响,我也会感到惊讶。事实上,我原本有N/2:p。是的,可以进一步优化。如果注意到循环中的x总是递减2。您可以先设置x=N,然后在循环中只执行x=x-2,这样就可以完全消除乘法