多くの場合、総和は閉形式の解に変換できます。条件付き総和を閉形式解に変換する
for (int i=0;i<n;i++)
result += i;
例えば
はresult += max(0, n * (n - 1)/2)
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
result += i;
に相当するresult += max(0, m * n * (n - 1)/2)
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
if (i < j)
result += i;
と等価であること
01と同等ですしたがって
for (int i=0;i<n;i++)
if (i+1 < m)
result += i * (m-i);
と
for (int i=0;i<min(n,m-1);i++)
result += m * i - i * i;
、したがって最終的result += max(0, m * min(n,m-1) * (min(n,m-1) - 1)/2 - (min(n,m-1) - 1) * ((min(n,m-1) - 1) + 1) * (2 * (min(n,m-1) - 1) + 1)/6)
と同等または多分容易閉にそのような変換の場合result += max(0, m <= n ? m * (m-1) * ((m-1) - 1)/2 - ((m-1) - 1) * (((m-1) - 1) + 1) * (2 * ((m-1) - 1) + 1)/6) : m * n * (n - 1)/2 - (n - 1) * ((n - 1) + 1) * (2 * (n - 1) + 1)/6)
として書き込ますることと等価と等価フォームソリューションは可能ですか?
条件、加算および乗算(すなわち多項式)のみが許される場合、常に最も内側のループから開始し、許容される最小/最大の範囲および追加された多項式を追跡することが可能であるようである。
ただし、手動でこの変換を行うと、範囲がすべてのループで分割されて指数関数的に増加するため、エラーが発生しやすく時間がかかります。
反復バージョンからクローズフォームソリューションを自動的に生成するツールはありますか?
分割が許可されると、どれくらい難しくなりますか?
for (int i=2;i<n;i++)
if (i % 2 == 0)
result += 1;
は
for (int i=2;i<n;i++)
if (n % i == 0)
result += 1;
一方むしろfor (int i=2;i<n;i+=2) result += 1;
ように簡単かつmax(0, (n/2) * (n/2 + 1))
に相当し変換するのは非常に難しいと思われます。
有限微積分のための良い、簡単なツールは何ですか?標準のCAS?しかし、おそらく入力としてCコードを取ることができませんでした – BeniBela