数列を表示する

 投稿者:山中和義  投稿日:2015年 9月21日(月)13時19分48秒
  次の数列を表示するプログラムをつくりなさい。

(1) 1,2,4,8,16,(  ),26,38,62,74,・・・

(2) 1,2,4,6,16,12,64,24,36,48,(  ),・・・

(3) 1,3,4,7,6,12,8,15,13,(  ),・・・

(4) 66,72,53,34,25,29,85,(  ),・・・

(5) 0,1,10,2,100,11,1000,3,20,(  ),・・・

(6) 14,91,62,53,64,96,48,11,(  ),・・・


答え

!(1) 1,2,4,8,16,(  ),26,38,62,74,・・・
!mとmの各桁の積との和、すなわちm=16なら、次は16+1×6=22
LET M=1
FOR N=1 TO 10
   PRINT M;
   LET T=M
   LET S=1 !各桁の積
   DO WHILE T>0
      LET S=S*MOD(T,10)
      LET T=INT(T/10)
   LOOP
   LET M=M+S
NEXT N
PRINT

!(2) 1,2,4,6,16,12,64,24,36,48,(  ),・・・
!mの約数の個数がn個になる最小のもの
!n=3のとき、4=1,2,4
!n=5のとき、16=1,2,4,8,16
FOR N=1 TO 11
   LET M=0
   DO
      LET M=M+1
      LET K=0 !約数の個数
      FOR D=1 TO M
         IF MOD(M,D)=0 THEN LET K=K+1
      NEXT D
   LOOP UNTIL K=N
   PRINT M;
NEXT N
PRINT

!(3) 1,3,4,7,6,12,8,15,13,(  ),・・・
!nの約数の和、すなわちn=6なら約数は1,2,3,6なので、1+2+3+6=12
FOR N=1 TO 10
   LET S=0 !約数の和
   FOR D=1 TO N
      IF MOD(N,D)=0 THEN LET S=S+D
   NEXT D
   PRINT S;
NEXT N
PRINT

!(4) 66,72,53,34,25,29,85,(  ),・・・
!数字の並びがx[k]=ab…cなら、x[k+1]=a^2+b^2+ … +c^2
LET X=66
FOR K=1 TO 8
   PRINT X;
   LET T=X !次へ
   LET S=0
   DO WHILE T>0
      LET S=S+MOD(T,10)^2
      LET T=INT(T/10)
   LOOP
   LET X=S
NEXT K
PRINT

!(5) 0,1,10,2,100,11,1000,3,20,(  ),・・・
!nを素因数分解する。n=(2^a)(3^b)…(p^c)のとき、指数をc…baと並べる。
!n=3=(2^0)(3^1)のとき、10
!n=5=(2^0)(3^0)(5^1)のとき、100
!n=6=(2^1)(3^1)のとき、11
!n=8=2^3のとき、3
DATA 15
DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 !素数列
READ M
DIM P(M)
MAT READ P
LET D$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" !数字
FOR N=1 TO 10
   LET S$=""
   FOR i=1 TO M !因数分解
      LET A=0
      LET T=N
      DO WHILE MOD(T,P(i))=0
         LET A=A+1
         LET T=T/P(i)
      LOOP
      LET S$=D$(A+1:A+1) & S$
      IF P(i)>N THEN EXIT FOR
   NEXT i
   IF LEN(S$)>1 THEN !0サプレス
      DO WHILE S$(1:1)="0"
         LET S$=S$(2:LEN(S$))
      LOOP
   END IF
   PRINT " ";S$;
NEXT N
PRINT

!(6) 14,91,62,53,64,96,48,11,(  ),・・・
!n^2すなわち1,4,9,16,25,…を1491625…と並べて、2つずつ並べていく。
LET S$=""
FOR N=1 TO 11
   LET S$=S$ & STR$(N^2)
   IF LEN(S$)>1 THEN !次へ
      LET L=LEN(S$)
      PRINT S$(1:2);" ";
      LET S$=S$(3:L)
   END IF
NEXT N
PRINT

END


 

Re: 数列を表示する

 投稿者:GAI  投稿日:2015年 9月21日(月)14時01分4秒
  > No.3844[元記事へ]

山中和義さんへのお返事です。

すごい。全部見破られた。
こんなプログラムになるんですね、勉強になります。
(4)はハッピー数と言われている数を求めるときの手順で
どんな整数もこれを繰り返せば最後は1になるか4->4のサイクルになるという。
1に到達するスタートの数をハッピー数というらしい。
これは約1/7存在しているらしく(1~1000で143個、1~10000で1442個、1~100000で14377個でした。運試しにちょうどいい割合だ。)
1になるまでの回数が10回になるスタートにある数が凄かったです。

 

戻る