-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbinomial.f90
More file actions
45 lines (39 loc) · 1.16 KB
/
binomial.f90
File metadata and controls
45 lines (39 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
program binomial
integer :: i, j
do j=1,25
write(*,fmt='(a,i2,a)',advance='no') ' ',j,'Cr = '
do i=0,j
write(*,fmt='(i0,a)',advance='no') n_C_r(j,i),' '
end do
write(*,*)
end do
write(*,'(a,i0)') ' 60C30 = ',n_C_r(60,30)
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