fortran66のブログ

fortran について書きます。

Problem 14

工夫せず素朴に求めます。4バイト整数ではオーバーフローしました。

ソース・プログラム

    program PEuler014
      implicit none
      integer :: i, k, kk(1e6)
      integer(8) :: m
      do i = 1, 1e6 
        k = 1
        m = i
        do 
          if (mod(m, 2) == 0) then
            m = m / 2
          else
            m = 3 * m + 1
          end if
          if (m == 1) exit
          k = k + 1
        end do
        kk(i) = k
      end do 
      print *, maxloc(kk), ':', maxval(kk)
      stop
    end program PEuler014

実行結果

837799 : 524
続行するには何かキーを押してください . . .