数列

 投稿者:山中和義  投稿日:2015年 5月 3日(日)18時40分27秒
  問題
S={1,5,11,13,17,29}として、{a[n]}は次の条件(1),(2),(3)を満たす数列とする。
条件
 (1) a[1]∈S
 (2) 個々の正整数nに対して(a[n+1]-1)/(a[n]+1)∈S
 (3) 10以下のある正整数nに対してa[n]=2015

このような条件を満たす数列{a[n]}において、それまでの和
 a[1]+a[2]+a[3]+ … +a[n] (n≦10,a[n]=2015)
はいくつになることができるか。


答え
バックトラック法で検索する。


DIM A(10),S(6)
DATA 1,5,11,13,17,29
MAT READ S
FOR N=10 TO 2 STEP -1 !逆からたどる
   LET A(N)=2015 !条件3
   CALL try(N-1,N,A,6,S)
NEXT N
END

EXTERNAL SUB try(P,N,A(),M,S())
FOR K=1 TO M !条件2
   LET T=(A(P+1)-1)/S(K)-1
   IF T>0 AND T=INT(T) THEN !これより、a[n]は正の整数
      IF P=1 THEN
         FOR i=1 TO M !条件1
            IF T=S(i) THEN EXIT FOR
         NEXT i
         IF i<=M THEN !結果を表示する
            PRINT STR$(T);
            FOR J=2 TO N
               LET T=T+A(J)
               PRINT "+";STR$(A(J));
            NEXT J
            PRINT "=";STR$(T)
         END IF
      ELSE
         LET A(P)=T
         CALL try(P-1,N,A,M,S) !次へ
      END IF
   END IF
NEXT K
END SUB


実行結果

1+35+181+2003+2005+2007+2009+2011+2013+2015=14280
29+151+153+2003+2005+2007+2009+2011+2013+2015=14396
29+391+393+395+397+399+401+2011+2013+2015=8444
29+31+33+35+397+399+401+2011+2013+2015=7364
5+31+33+35+397+399+401+2011+2013+2015=7340
13+71+73+75+77+79+401+2011+2013+2015=6828
1+3+117+2007+2009+2011+2013+2015=10176
1+35+397+399+401+2011+2013+2015=7272
1+3+5+79+401+2011+2013+2015=6528
5+79+401+2011+2013+2015=6524


 

戻る