数列の和の中心
十進BASIC_算数 へ戻る
大学生のための数学 へ戻る
2013.09.30


  初項 1 公差 1 の等差数列の中のある項よりも左と右の項の総和が等しくなるケースを求める十進BASIC のプログラムを、 十進BASIC_プログラミング > しらみつぶし法からの脱却 でご紹介しましたが、 初項 1 公差 1 の等差数列を2分したときに左右の総和が等しくなるケースを求める十進BASIC のプログラムは、 山中和義 / 電脳遊戯団 さんの次のサイトで公開されています。
     http://www.urban.ne.jp/home/kz4ymnk/seminar/basic/index.html


 110 DIM S ( 100000 )
 120 LET S ( 1 ) = 1
 130 FOR k = 2 TO 100000
 140  LET S ( k ) = S ( k−1 ) + k
 150 NEXT k
 160 LET c = 0
 170 FOR n = 1 TO 100000
 180 LET key = S ( n ) / 2
 190 LET L = 1
 200 LET H = n
 210 DO WHILE L <= H
 220  LET M = INT ( ( L + H ) / 2 )
 230   IF S ( M ) <= key THEN LET L = M + 1
 240   IF S ( M ) >= key THEN LET H = M−1
 250 LOOP
 260 IF L−H = 2 THEN
 270   LET c = c + 1
 280   PRINT c;"個目"
 290   PRINT " 1 ・・・ + " ;M; " = " ;M + 1;
 300   IF M < n−1 THEN
 310     PRINT " + ・・・ + " ;n;
 320   END IF
 330   PRINT "( = " ;S ( M ) ; " )"
 340 END IF
 350 NEXT n
 360 END



  このプログラムのアルゴリズムを見てみましょう。
  110 〜 150 は、 初項1公差1の等差数列 ( 1 2 3 4 ・ ・ ・ ) の初項からその項までの和の数列を作っています。つまり、次のような数列です。
     1  3  6  10  ・ ・ ・ ・
  210 〜 250 は、 初項 1 公差 1 の n項までの等差数列 ( 1 2 3 4 ・ ・ ・ n ) の中央の項をピックアップして、初項からその項までの和が全項の和の半分になっていたら、 L−H = 2 としてからループを抜け、 初項からその項までの和が全項の和の半分よりも小さい時には中央の項の右隣りを新たにピックアップし、 初項からその項までの和が全項の和の半分よりも大きい時には中央の項の左隣りを新たにピックアップして、 同様の比較をしていって、 もし、 初項または終りから2項目をピックアップして同様の比較をしても、 初項からその項までの和が全項の半分になっていなければ、 ループを抜けます。
  260 〜 340 は、 初項 1 公差 1 の等差数列を2分したときに左右の総和が等しくなるケースが見つかるたびに書き出しています。
  170350 は、 初項 1 公差 1 の等差数列の項の数を1から始めて1ずつ大きくして行き 100000 で終了します。


  < コピペ用の窓 >