三角数の数列は自然数の和で表わされ, 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
ツイート