LoginSignup
11
11

More than 5 years have passed since last update.

夏休みFortran祭り Jupyter-fortran

Last updated at Posted at 2017-08-07

forteratos.png

夏休みFortran祭り

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 の設定

エラトステネスのふるいによる素数求め 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
11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11