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
ツイート