【发布时间】:2013-04-17 13:59:10
【问题描述】:
给定方程:
K = Ap + Bq + Cr + Ds.
我试过的解决方案:
我们已经知道的术语:A、B、C、D、K
在给定 p, q, r 的情况下找到术语 s;
p=0, q=0, r=1;
compute() => s = (K - Ap - Bq - Cr)/D;
继续直到 s 变为 对于所有项 p=0, q=0, r=1...n;
同样地继续,直到 s 变为 对于 p=0, q=1..n, r=1...n 的所有项;
和, 最后,继续直到 s 变为 对于 p=1..n、q=1..n 和 r=1..n 的所有项; em> 为更新 p、q 和 r 编写了 3 个循环。 如果 K 变大,例如 1000...、8145、45000 等,计算需要更多时间; 请不要推荐外部库...我正在寻找编码解决方案。 示例片段 另外,如果有人注意到:preSpecifiedIterations -> 是否可以在计算之前确定需要多少次迭代? 还有没有更好的算法来解决上述问题? 非常感谢您的阅读。for (int i = 0; i < preSpecifiedIterations; i++)
{
p = i;
if (A * p > K) //Exit condition ; if Ap > K
break;
for (int j = 0; j < preSpecifiedIterations; j++)
{
q = j;
if (B * q > K) //Exit condition ; if Bq > K
break;
for (int k = 1; k < preSpecifiedIterations; k++)
{
r = k;
// compute s given p, q, and r;
s = (K - (A * p) - (B * q) - (C * r)) / D;
if (s < 0) //Exit condition ; don't process if s < 0 i.e negative values
break;
else
...
}
}
}
【问题讨论】:
-
没有人能告诉您最快的方法是什么,因为这取决于许多因素。更好的方法是说“我需要在 4 GHz 64 位 Windows 机器上在 50 毫秒内找到解决方案”,或者无论您的时间预算和硬件是什么。
-
感谢您的回复..我担心我们能多快得到解决方案,即算法优化......就像可能有 3 到 6 个线程......处理不同的 p 值(p =0, q=1..n and r=1..n) 在一个线程上然后 p=1, q=1..n 和 r=1..n 在另一个线程上.. 同样明智.. 但是如果我们有一个更好的算法,对于任何给定的 K 值,可能不需要多次迭代。当 K 设置为 50,000 时,更新大约需要 10 分钟。
-
所以为了清楚起见,您正在尝试求解 丢番图方程 是吗?人类研究丢番图方程已有 2300 年的历史,并且有大量关于它们的文献。在这里可以总结的更多。
-
再次感谢.. 并感谢您指出它.. 是的,它是丢番图方程,但包含更多变量。
标签: c# polynomial-math factorization