与えられた式 :
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 が < 0 になる まで続行します。すべての項に対して p=0、q=0、r=1...n;
同様に、 s が < 0 になる まで続行します。p=0、q=1..n、r=1...n のすべての項に対して。
と、
最後に、 s が < 0 になる まで続行します。p=1..n、q=1..n、r=1..n のすべての項に対して。
p、q、r を更新するためのコード化された 3 つのループ。
K が 1000...、8145、45000 などのように大きくなると、計算に時間がかかります。
外部ライブラリを提案しないでください...コーディングソリューションを探しています。
スニペットの例
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
...
}
}
}
また、次のことに注意してください: preSpecifiedIterations -> 計算前に必要な反復回数を決定することは可能ですか?
上記の問題を解決するためのより良いアルゴリズムはありますか?
たくさん読んでくれてありがとう。