プログラムの実行結果は以下の通り。
181 2 3 7 78 91 141 2 3 8 32 96 134 2 3 8 33 88 121 2 3 8 36 72 113 2 3 8 40 60 111 2 3 8 42 56 135 2 3 9 22 99 110 2 3 9 24 72 95 2 3 9 27 54 89 2 3 9 30 45 123 2 3 10 18 90 95 2 3 10 20 60 79 2 3 10 24 40 71 2 3 11 22 33 115 2 3 12 14 84 92 2 3 12 15 60 81 2 3 12 16 48 71 2 3 12 18 36 67 2 3 12 20 30 66 2 3 12 21 28 69 2 3 14 15 35 109 2 4 5 28 70 101 2 4 5 30 60 92 2 4 5 36 45 110 2 4 6 14 84 87 2 4 6 15 60 76 2 4 6 16 48 66 2 4 6 18 36 62 2 4 6 20 30 61 2 4 6 21 28 67 2 4 7 12 42 55 2 4 7 14 28 95 2 4 8 9 72 64 2 4 8 10 40 50 2 4 8 12 24 45 2 4 9 12 18 43 2 4 10 12 15 67 2 5 6 9 45 53 2 5 6 10 30 45 2 5 6 12 20 38 3 4 5 6 20 Find 38 3 4 5 6 20
これを式に直すと以下の通り。
プログラムのソースは以下の通り。
#include "puzutl.h" int main( int argc, cstring argv[]) { int m = 100; // この値の範囲で探す int sum = 0, A, B, C, D, E; for( int a=2; a< m; a++) { for( int b=a+1; b< m; b++) { for( int c=b+1; c< m; c++) { for( int d=c+1; d< m; d++) { for( int e=d+1; e< m; e++) { int T1 = b*c*d*e + a*c*d*e + a*b*d*e + a*b*c*e + a*b*c*d; // 分子 int T2 = a*b*c*d*e; // 分母 if( T1 < T2) { // 結果は1未満,これ以上探しても更に小さい数になるので探索終了 break; } else if( T1 == T2) { // T1 / T2 = 1 int s = a+b+c+d+e; ps( "%4d %3d %3d %3d %3d %3d\n", s, a, b, c, d, e); if( sum == 0) { // 最初の結果 A = a; B = b; C = c; D = d; E = e; sum = a+b+c+d+e; } else if( a+b+c+d+e < sum) { // 2個目以降は合計値が小さいものを記録する A = a; B = b; C = c; D = d; E = e; sum = a+b+c+d+e; } } } } } } } if( sum != 0) { ps( "Find\n"); ps( "%4d %3d %3d %3d %3d %3d\n", sum, A, B, C, D, E); } return 0; }