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

Problem12「高度整除三角数」

問題

三角数の数列は自然数の和で表わされ, 7番目の三角数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 である. 三角数の最初の10項は:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

となる. 最初の7項について, その約数を列挙すると, 以下のとおり.

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

これから, 7番目の三角数である28は, 6個以上の約数をもつ最初の三角数であることが分かる. では, 500個以上の約数をもつ最初の三角数はいくつか.

解答

三角数の約数の数を順番にチェックして、 500個以上のものが見つかった時点で終了します。 約数の数はその数の平方根以下について調べて 2倍すればよいです(平方数の場合は 1引く)。

program problem12
  implicit none
  integer i, tri, nfactor
  i = 0
  tri = 0
  
  do
     i = i + 1
     tri = tri + i
     if(nfactor(tri) > 500) exit
  end do
  
  write(*,*) tri
end program problem12

function nfactor(num)
  implicit none
  integer,intent(in) :: num
  integer i, sq, nfactor
  nfactor = 0
  sq = int(sqrt(real(num)))
  do i = 1, sq
     if(mod(num,i)==0) nfactor = nfactor + 2
  end do
  if(num==sq*sq) nfactor = nfactor - 1
end function nfactor

答え:76576500

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