プログラムで数学の問題に挑戦します。Project Euler(プロジェクトオイラー)をFortran(Fortran90/95)言語のプログラムで解いていくのが目標です。

Problem10「素数の和」

問題

10以下の素数の和は 2 + 3 + 5 + 7 = 17 である. 200万以下の全ての素数の和を求めよ.

解答

エラトステネスの篩で200万以下の素数のリストを作り、組み込み関数sumで合計を求めます。 合計値がオーバーフローしないように64ビット整数型に変換しています。

program problem10
  implicit none
  integer,parameter :: nmax = 2000000
  integer,parameter :: k = selected_int_kind(12)
  integer i,np, prime(nmax)
  
  call sieve(nmax,prime,np)
  write(*,*) sum(int(prime(1:np),k))
end program problem10

subroutine sieve(nmax,prime,np)
  implicit none
  integer,intent(in) :: nmax
  integer,intent(out) :: prime(nmax), np
  integer i, dum(nmax)
  np = 0
  prime=0
  
  do i = 2, nmax
    dum(i) = i
  end do

  do i = 2, nmax
    if(dum(i) /= 0) then
      np = np + 1
      prime(np) = dum(i)
      dum(i*2:nmax:i)=0
    end if
  end do
end subroutine sieve

答え:142913828922

web拍手 by FC2 このエントリーをはてなブックマークに追加
Copyright (C) 2012 - FortranでProject Euler All Rights Reserved.
inserted by FC2 system