zOs/REXX/GEBDUP

numeric digits 22
n = 1e6
do g=1 to 50
    say 'n' n 'g' g '==>' dup(n, g)
    end
exit
dup: procedure expose m.
parse arg n , g
    r =1e0
    do y=0 to g-1
         r = r * (n-g-y) / (n-y)
         end
    return r