ソースコードの前に実行結果を出しておきます。
一乗和の公式:(1/2)*n^1+(1/2)*n^2
二乗和の公式:(1/6)*n^1+(1/2)*n^2+(1/3)*n^3
三乗和の公式:(0/1)*n^1+(1/4)*n^2+(1/2)*n^3+(1/4)*n^4
四乗和の公式:(-1/30)*n^1+(0/1)*n^2+(1/3)*n^3+(1/2)*n^4+(1/5)*n^5
五乗和の公式:(0/1)*n^1+(-1/12)*n^2+(0/1)*n^3+(5/12)*n^4+(1/2)*n^5+(1/6)*n^6
六乗和の公式:(1/42)*n^1+(0/1)*n^2+(-1/6)*n^3+(0/1)*n^4+(1/2)*n^5+(1/2)*n^6+(1/7)*n^7
七乗和の公式:(0/1)*n^1+(1/12)*n^2+(0/1)*n^3+(-7/24)*n^4+(0/1)*n^5+(7/12)*n^6+(1/2)*n^7+(1/8)*n^8
八乗和の公式:出力はされるものの,間違っている。オーバーフローしてるっぽい。
九乗和の公式:例外が発生する
本当は100乗和の公式とか出してみたかったんだけれどなぁ。残念。int型は2^31-1までしか扱えないから,おそらくそのせい。BigInteger使うのもありかもしれないけれど,それをやるのはまた今度かな。
ソースコード。昨日のFractionクラスは省略しています。必ず追加してくださいね。
ソースコードほぼ同じじゃねーか。ページ数稼ぎかよ,とは言わないで。
追記:
255乗和の公式のような,任意のべき乗和を求めるプログラムが完成しました→BigIntegerを使って累乗和の公式を計算[C#]
using System; class Program { static void Main() { Console.WriteLine("何乗和の公式を求めますか?"); var N = int.Parse(Console.ReadLine()) + 1; // 係数を求める連立方程式の拡大係数行列を作る var formula = MakeFormula(N); // 連立方程式をガウス消去法で計算 Solve(formula, N); // 結果を表示 Show(formula, N); } // 連立方程式を解くメソッド static void Solve(Fraction[,] formula, int N) { Fraction temp; // ガウス消去法 // 前進消去 for (int i = 0; i < N; i++) { // 対角対角成分をを1にする temp = formula[i, i]; for (int j = 0; j < N + 1; j++) formula[i, j] /= temp; // i+1行以降のi列目を0にする for (int j = i + 1; j < N; j++) { temp = formula[j, i]; for (int k = 0; k < N + 1; k++) formula[j, k] -= temp * formula[i, k]; } } // 後進消去 for (int i = N - 1; i >= 0; i--) { // 対角成分以外を0にする for (int j = i - 1; j >= 0; j--) { formula[j, N] -= formula[j, i] * formula[i, N]; formula[j, i] = 0; } } } // 累乗和の公式を表示するメソッド static void Show(Fraction[,] d, int N) { Console.WriteLine("{0}乗和の公式は……", N - 1); for (int i = 0; i < N; i++) { Console.Write("({0})*n^{1}", d[i, N], i + 1); if (i + 1 < N) Console.Write("+"); } Console.WriteLine(); } // 累乗和の公式を求める連立方程式の拡大係数行列を作るメソッド static Fraction[,] MakeFormula(int N) { var ret = new Fraction[N, N + 1]; var sum = 0; for (int i = 0; i < N; i++) { // 係数部分を作る for (int j = 0; j < N; j++) ret[i, j] = (int)(Math.Pow(i + 1, j + 1)); // 答えの部分を作る sum = sum + (int)(Math.Pow(i + 1, N - 1)); ret[i, N] = sum; } return ret; } }
ソースコードほぼ同じじゃねーか。ページ数稼ぎかよ,とは言わないで。
追記:
255乗和の公式のような,任意のべき乗和を求めるプログラムが完成しました→BigIntegerを使って累乗和の公式を計算[C#]
0 件のコメント:
コメントを投稿