diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2022-09-20 20:36:13 +0200 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2022-09-20 20:37:16 +0200 |
commit | b70d57b1bb12cfb5b5923537cc1615fd268aecd9 (patch) | |
tree | 77bbf62aaa8a099a0f1866d47705ef192f443b80 /gcd.f90 | |
parent | 7e77b68f6879917a27a0fa3426b9ceef242a9879 (diff) | |
download | gcd-b70d57b1bb12cfb5b5923537cc1615fd268aecd9.tar.gz |
Update Fortran
Diffstat (limited to 'gcd.f90')
-rw-r--r-- | gcd.f90 | 52 |
1 files changed, 52 insertions, 0 deletions
@@ -0,0 +1,52 @@ +! SYNOPSIS: +! +! # gfortran -o gcd-f gcd.f90 +! # ./gcd-f 11 22 33 121 +! + +program GCD + implicit none + + integer, allocatable :: ns(:) + integer :: i, n + character(len=20) :: tmpstr + + n = command_argument_count() + + allocate (ns(n)) + + do i = 1, n + call get_command_argument(i, tmpstr) + ns(i) = str2int(tmpstr) + end do + + print '(I0)', gcdn(ns) + + deallocate (ns) + +contains + + pure integer function str2int(s) + character*(*), intent(in) :: s + read (s, *) str2int + end function + + pure recursive integer function gcd2(a, b) result(GCD) + integer, intent(in) :: a, b + if (b == 0) then + GCD = a + else + GCD = gcd2(b, mod(a, b)) + end if + end function gcd2 + + pure integer function gcdn(n) + integer, intent(in) :: n(:) + integer :: i + gcdn = n(1) + do i = 2, size(n) + gcdn = gcd2(gcdn, n(i)) + end do + end function + +end program |