summaryrefslogtreecommitdiff
path: root/gcd.bas
blob: f63fd2371d5832d233726875b2f5d95cf8f0b658 (plain)
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
' Tested with FreeBASIC 1.10.0
'
' Synopsis:
' $ fbc -x gcd-bas gcd.bas
' $ ./gcd-bas 11 22 33 121
'

FUNCTION gcd2 (BYVAL a AS ULONGINT, BYVAL b AS ULONGINT) AS ULONGINT
  DIM c AS ULONGINT
  DO WHILE (b > 0)
    c = b
    b = a MOD b
    a = c
  LOOP
  RETURN a
END FUNCTION


FUNCTION gcdn (nums() AS ULONGINT) AS ULONGINT
  DIM gcd AS ULONGINT = nums(LBOUND(nums))
  FOR i AS INTEGER = LBOUND(nums) + 1 TO UBOUND(nums)
    gcd = gcd2(gcd, nums(i))
  NEXT
  RETURN gcd
END FUNCTION


DIM argc AS INTEGER = 0
DO WHILE (LEN(COMMAND(argc + 1)) > 0)
  argc += 1
LOOP

IF argc = 0 THEN STOP

DIM nums(argc) AS ULONGINT
FOR i AS INTEGER = 1 TO argc
  nums(i) = VALULNG(COMMAND(i))
NEXT

PRINT gcdn(nums())