Fortran
gist
Jupyter

夏休みFortran祭り Jupyter-fortran

https://gist.github.com/cure-honey/decf5be6d2d3a9bce9a0fa08e611ac09

forteratos.png

夏休みFortran祭り

Jupyter-fortran-kernel

https://github.com/ZedThree/jupyter-fortran-kernel

修正点

git clone git@github.com:ZedThree/jupyter-fortran-kernel.git <- git clone https://github.com/ZedThree/jupyter-fortran-kernel.git

pip install -e --user jupyter-fortran-kernel                  <- pip install -e jupyter-fortran-kernel --user


jupyter-kernelspec install fortran_spec/                      <- jupyter-kernelspec install fortran_spec/ --user

時々2回 shift+ENTER しないと出力しません。謎

GitHub Gist の設定

https://gist.github.com/genkuroki/81de23edcae631a995e19a2ecf946a4f

エラトステネスのふるいによる素数求め 1000以下

program eratos
  integer, parameter :: n = 10**3
  integer :: i, itab(n)
  integer, allocatable :: ip(:)
  itab = 0
  forall (i = 2:n) itab(i) = i
  do i = 2, int(sqrt(real(n)))
    if (itab(i) /= 0) itab(i**2::i) = 0
  end do
  ip = pack(itab, itab /= 0)
  print '(*(i5))', ip
  print *, 'number of primes', size(ip)
end program eratos
    2    3    5    7   11   13   17   19   23   29   31   37   41   43   47   53   59   61   67   71   73   79   83   89   97  101  103  107  109  113  127  131  137  139  149  151  157  163  167  173  179  181  191  193  197  199  211  223  227  229  233  239  241  251  257  263  269  271  277  281  283  293  307  311  313  317  331  337  347  349  353  359  367  373  379  383  389  397  401  409  419  421  431  433  439  443  449  457  461  463  467  479  487  491  499  503  509  521  523  541  547  557  563  569  571  577  587  593  599  601  607  613  617  619  631  641  643  647  653  659  661  673  677  683  691  701  709  719  727  733  739  743  751  757  761  769  773  787  797  809  811  821  823  827  829  839  853  857  859  863  877  881  883  887  907  911  919  929  937  941  947  953  967  971  977  983  991  997
 number of primes         168

エラトステネスのふるいによる素数求め 

10^8 以下の素数の個数を求める。

ただし偶数を表から抜く。表を3から始める。[3,5,7,9,...10^8-1]

program eratos3
  integer(8), parameter :: ip = 8
  logical(1), allocatable :: itab(:) 
  integer(8) :: i, j, np
  np = 10**ip / 2 - 1
  allocate(itab(np))
  forall(i = 1:np) itab(i) = .true.
  do i = 1, int( (sqrt(real(2*(np + 1)))  ))
    if (itab(i)) forall(j = 2*i*(i+1):np:2*i+1) itab(j)= .false.
  end do
  print *, count(itab) + 1
end program eratos3
     5761455