数列

上の画像の数列はUlam numberと呼ばれるものです。
この数列は、以前に出てきた数字で一通りの足し算だけでしか表せられない数を列挙したものです。で、18の次に続く数字は26です。
ただし、26ではない値、正確にはどんな数字もokで、正解なのです。たとえ1000000000という値でも。
なぜならば、条件式が何もないからです。どんな規則に従ってる、という条件もありません。
数列というのは無限まで保証がなければ次に何の数字が来るかわからないものなのです。


数列のあれこれ

三角数


三角数とは、数列
\(0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, …\)
という数列であり、
\(a_n=\frac{n(n+1)}{2}, n=0,1,2,\cdots\)
と表されます。その和\(S_n\)は
\(S_n=\frac{n(n+1)(n+2)}{6}, n=0,1,\cdots\)
と表されます。


\(0\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 4\ 4\ 4\ \cdots\)
という数列を作りたい。この数列を得るためにfortranプログラムは、

subroutine ntriangl(b,t,a)
  !sikinote
  !produce array of triangle number.
  ! 1 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 ...
  implicit none
  integer,intent(in)::b,t
  integer,intent(out)::a(b:t)
  integer::i,j,k,N
 
  a(b:t)=0
  if(b.gt.t)then
     write(6,*)"b must be larger than t"
     write(6,*)"return a=0"
     return
  endif

  k=b-1
  N=t-b+1
  do i=1,t
     do j=1,i*(i+1)/2
        k=k+1
        if(k.gt.t)exit
        write(6,*)k,t,i,j
        a(k)=i        
     enddo
     if(k.gt.t)exit
  enddo
 
  return
end subroutine ntriangl

となります。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です