RosettaCodeData/Task/Evaluate-binomial-coefficients/Fortran/evaluate-binomial-coefficie...

44 lines
1.1 KiB
Fortran

program binomial
integer :: i, j
do j=1,20
write(*,fmt='(i2,a)',advance='no') j,'Cr = '
do i=0,j
write(*,fmt='(i0,a)',advance='no') n_C_r(j,i),' '
end do
write(*,'(a,i0)') ' 60C30 = ',n_C_r(60,30)
end do
stop
contains
pure function n_C_r(n, r) result(bin)
integer(16) :: bin
integer, intent(in) :: n
integer, intent(in) :: r
integer(16) :: num
integer(16) :: den
integer :: i
integer :: k
integer, parameter :: primes(*) = [2,3,5,7,11,13,17,19]
num = 1
den = 1
do i=0,r-1
num = num*(n-i)
den = den*(i+1)
if (i > 0) then
! Divide out common prime factors
do k=1,size(primes)
if (mod(i,primes(k)) == 0) then
num = num/primes(k)
den = den/primes(k)
end if
end do
end if
end do
bin = num/den
end function n_C_r
end program binomial