Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,72 @@
|
|||
' Greatest common divisor
|
||||
PROGRAM "gcddemo"
|
||||
VERSION "0.001"
|
||||
|
||||
DECLARE FUNCTION Entry()
|
||||
DECLARE FUNCTION GcdRecursive(u&, v&)
|
||||
DECLARE FUNCTION GcdIterative(u&, v&)
|
||||
DECLARE FUNCTION GcdBinary(u&, v&)
|
||||
|
||||
FUNCTION Entry()
|
||||
m& = 49865
|
||||
n& = 69811
|
||||
PRINT "GCD("; LTRIM$(STR$(m&)); ","; n&; "):"; GcdIterative(m&, n&); " (iterative)"
|
||||
PRINT "GCD("; LTRIM$(STR$(m&)); ","; n&; "):"; GcdRecursive(m&, n&); " (recursive)"
|
||||
PRINT "GCD("; LTRIM$(STR$(m&)); ","; n&; "):"; GcdBinary (m&, n&); " (binary)"
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION GcdRecursive(u&, v&)
|
||||
IF u& MOD v& <> 0 THEN
|
||||
RETURN GcdRecursive(v&, u& MOD v&)
|
||||
ELSE
|
||||
RETURN v&
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION GcdIterative(u&, v&)
|
||||
DO WHILE v& <> 0
|
||||
t& = u&
|
||||
u& = v&
|
||||
v& = t& MOD v&
|
||||
LOOP
|
||||
RETURN ABS(u&)
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION GcdBinary(u&, v&)
|
||||
u& = ABS(u&)
|
||||
v& = ABS(v&)
|
||||
IF u& < v& THEN
|
||||
t& = u&
|
||||
u& = v&
|
||||
v& = t&
|
||||
END IF
|
||||
IF v& = 0 THEN
|
||||
RETURN u&
|
||||
ELSE
|
||||
k& = 1
|
||||
DO WHILE (u& MOD 2 = 0) && (v& MOD 2 = 0)
|
||||
u& = u& >> 1
|
||||
v& = v& >> 1
|
||||
k& = k& << 1
|
||||
LOOP
|
||||
IF u& MOD 2 = 0 THEN
|
||||
t& = u&
|
||||
ELSE
|
||||
t& = -v&
|
||||
END IF
|
||||
DO WHILE t& <> 0
|
||||
DO WHILE t& MOD 2 = 0
|
||||
t& = t& \ 2
|
||||
LOOP
|
||||
IF t& > 0 THEN
|
||||
u& = t&
|
||||
ELSE
|
||||
v& = -t&
|
||||
END IF
|
||||
t& = u& - v&
|
||||
LOOP
|
||||
RETURN u& * k&
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
END PROGRAM
|
||||
Loading…
Add table
Add a link
Reference in a new issue