fortran66のブログ

fortran について書きます。

problem 005

ソース・プログラム

    program PEuler5
      implicit none
      integer, parameter :: n = 20
      integer, allocatable :: itab(:), ipow(:)
      integer :: k
      itab = ieratos(n)
      ipow = log(real(n)) / log(real(itab)) ! max prime power
      print *, product(itab**ipow)  ! lcm
      stop
    contains  
      function ieratos(n) ! thieve of Eratostenes
        integer, intent(in) :: n
        integer, allocatable :: ieratos(:)
        logical :: tab(n)
        integer :: i
        tab = .true.
        tab(1) = .false.
        do i = 2, int( sqrt(real(n)) ) 
          if ( tab(i) ) tab(i * i:n:i) = .false.
        end do
        ieratos = pack( [ (i, i = 1, n) ], mask = tab )
        return
      end function ieratos
    end program PEuler5

実行結果

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