! CCALLF95.F90 ! Copyright 1998 Lahey Computer Systems, Inc. program ccallf95 ml_external demomain call demomain() stop end recursive function factorial(i) result(f) integer:: f if (i==1) then f=1 else f=i*factorial(i-1) endif return end subroutine do_random_factorials(array, min_value, max_value) ml_external do_random_factorials integer:: min_value, max_value integer, dimension(0:1,0:max_value-min_value):: array logical, dimension(0:max_value-min_value):: used integer:: n,factorial real:: x, range range=max_value-min_value+1 used=.false. do i=0,range-1 do call random_number(x) n=int(range*x) ! n has values from 0 to range-1 if (.not.used(n)) exit enddo used(n)=.true. array(0,i)=min_value+n ! array(0,i) has values from min_value ! to max_value because ! (min_value+range-1)= ! (min_value+max_value-min_value+1-1)= ! max_value array(1,i)=factorial(array(0,i)) enddo return end