今回は前回、コードにした中学入試問題を変形してみましょう。まずは、前編の問題とコードを紹介します。
ある整数を、0より大きい整数の和で表わす方法が何通りあるかを考えます。使う数が同じで順番だけが違うものは、1とおりに数えます。また一個の整数だけを使うものも、1とおりとして数えます。0を使ってはいけません。たとえば、6を3個以下の整数の和で表わす方法は、
6
5+1
4+2
3+3
4+1+1
3+2+1
2+2+2
の7とおりあります。
では、50を3個以下の整数の和で表わす方法は、何通りありますか。
(第5回算数オリンピック、ファイナル問題より)
コード
daa = Union[Flatten[Table[Sort[{a, b, c}], {a, 0, 50}, {b, 0, 50}, {c, 0, 50}],2]];
Length[Select[daa, (#[[1]] + #[[2]] + #[[3]]) == 50 &]]
今回は問題の数字を変形します。(問題の条件は今回は変えません)
ある整数を、0より大きい整数の和で表わす方法が何通りあるかを考えます。使う数が同じで順番だけが違うものは、1とおりに数えます。また一個の整数だけを使うものも、1とおりとして数えます。0を使ってはいけません。たとえば、6を3個以下の整数の和で表わす方法は、
6
5+1
4+2
3+3
4+1+1
3+2+1
2+2+2
の7とおりあります。
では、1~100を3個以下の整数の和で表わす方法は、何通りありますか。
このように、50を1~100にしてみます。
In[1]:=Table[Se[a],{a, 1, 100}]
Out[1]:={1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16, 19, 21, 24, 27, 30, 33, 37, 40,44, 48, 52, 56, 61, 65, 70, 75, 80, 85, 91, 96, 102, 108, 114, 120,127, 133, 140, 147, 154, 161, 169, 176, 184, 192, 200, 208, 217, 225,234, 243, 252, 261, 271, 280, 290, 300, 310, 320, 331, 341, 352, 363, 374, 385, 397, 408, 420, 432, 444, 456, 469, 481, 494, 507, 520, 533, 547, 560, 574, 588, 602, 616, 631, 645, 660, 675, 690, 705, 721, 736, 752, 768, 784, 800, 817, 833, 850, 867, 884}
数値の羅列をみてもわからないので、プロットします。(ここで、Wolframの新商品 Wolfram Alpha Notebook Editionに入力します。商品の説明は次回します)
Wolfram Alphaは数列を入力するだけで、分析してくれます。が、数列の数に制限ある….というわけで、今回は最初の46個(46個が限界)を分析してもらいました。
出力結果を書いていきます。
まず、数列を延長した場合の結果
1,2,3,4,5,7,8,10,12,14,16,19,21,24,27,30,33,37,40,44,48,52,56,61,65,70,75,80,85,91,96,102,108,114,120,127,133,140,147,154,161,169,176,184,192,200,208,217,225,234,243,252,261,271,280,290,300,310,320,331,341,352,363,374,385,397,408,420,432,444,456,
このことは、46個入力して、71個のデータが出力されています。これは、この数列が規則的に並んでいるという証拠で、最初にMathematicaで出力したデータと一致したため、Wolfram Alphaの分析方法は正しいということになります。
また、この数列を単純な式(閉形型)にすると
このような結果になります。要するに何が言いたいかというと数列に規則があるということ。
ここからは、3個以下の整数の和で表わす方法をn個以下の整数の和で表わす方法と、nの数を変えていきます。
2個の時(n=2)、(ここからは、母関数、プロット、閉形型)この3つを出力します。
{1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50,
3個の時は飛ばして(前述)、4個の場合(n=4)
{1, 2, 3, 5, 6, 9, 11, 15, 18, 23, 27, 34, 39, 47, 54, 64, 72, 84, 94, 108, 120, 136, 150, 169, 185, 206, 225, 249, 270, 297, 321, 351, 378, 411, 441, 478, 511, 551, 588, 632, 672, 720, 764, 816, 864, 920, 972, 1033, 1089, 1154, 1215, 1285, 1350, 1425, 1495, 1575, 1650, 1735, 1815, 1906, 1991, 2087, 2178, 2280, 2376, 2484, 2586, 2700, 2808, 2928, 3042, 3169, 3289, 3422, 3549, 3689, 3822, 3969, 4109, 4263, 4410, 4571, 4725, 4894, 5055, 5231, 5400, 5584, 5760, 5952, 6136, 6336, 6528, 6736, 6936, 7153, 7361, 7586, 7803, 8037}
プロット
母関数
結果なし
これ以上はパソコンのメモリが足らず計算不可
結果・結論
数は規則的に並んでるようだけど、公式をつくるにはもっとパソコンのメモリを増やさなければ….!こんなパソコン使えたらなぁ…
まぁ、私が使うにはオーバースペックですけど….
コメント