プログラミングコンテストでは、問題は次のとおりでした。
方程式のすべての解を数えます
x + 4y + 4z = n
。あなたが与えられn
、あなたは解決策の数を決定します。x、y、zが正の整数であると仮定します。
トリプルforループ(ブルートフォース)の使用を検討しましたが、効率が悪く、TIMELIMITEXCEEDが発生しました。(nは= 1000,000である可能性があるため):
int sol = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n / 4; j++)
{
for (int k = 1; k <= n / 4; k++)
{
if (i + 4 * j + 4 * k == n)
sol++;
}
}
}
私の友人は問題を解決することができました。私が彼に尋ねたとき、彼はブルートフォースをまったく使用しなかったと言いました。代わりに、彼は方程式を「シリーズ」(つまり合計)に変換しました。私は彼にどうやって私を言うように頼んだが、彼は拒否した:)
方法を教えてもらえますか?