Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,26 @@
|
|||
PROGRAM EXRECURGCD.PAS;
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$mode objfpc}{$H+}{$J-}{R+}
|
||||
{$ELSE}
|
||||
{$APPTYPE CONSOLE}
|
||||
{$ENDIF}
|
||||
|
||||
(*)
|
||||
Free Pascal Compiler version 3.2.0 [2020/06/14] for x86_64
|
||||
The free and readable alternative at C/C++ speeds
|
||||
compiles natively to almost any platform, including raspberry PI
|
||||
(*)
|
||||
|
||||
FUNCTION gcd_recursive(u, v: longint): longint;
|
||||
|
||||
BEGIN
|
||||
IF ( v = 0 ) THEN Exit ( u ) ;
|
||||
result := gcd_recursive ( v, u MOD v ) ;
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
|
||||
WriteLn ( gcd_recursive ( 231, 7 ) ) ;
|
||||
|
||||
END.
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
function gcd_iterative(u, v: longint): longint;
|
||||
var
|
||||
t: longint;
|
||||
begin
|
||||
while v <> 0 do
|
||||
begin
|
||||
t := u;
|
||||
u := v;
|
||||
v := t mod v;
|
||||
end;
|
||||
gcd_iterative := abs(u);
|
||||
end;
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
function gcd_binary(u, v: longint): longint;
|
||||
var
|
||||
t, k: longint;
|
||||
begin
|
||||
u := abs(u);
|
||||
v := abs(v);
|
||||
if u < v then
|
||||
begin
|
||||
t := u;
|
||||
u := v;
|
||||
v := t;
|
||||
end;
|
||||
if v = 0 then
|
||||
gcd_binary := u
|
||||
else
|
||||
begin
|
||||
k := 1;
|
||||
while (u mod 2 = 0) and (v mod 2 = 0) do
|
||||
begin
|
||||
u := u >> 1;
|
||||
v := v >> 1;
|
||||
k := k << 1;
|
||||
end;
|
||||
if u mod 2 = 0 then
|
||||
t := u
|
||||
else
|
||||
t := -v;
|
||||
while t <> 0 do
|
||||
begin
|
||||
while t mod 2 = 0 do
|
||||
t := t div 2;
|
||||
if t > 0 then
|
||||
u := t
|
||||
else
|
||||
v := -t;
|
||||
t := u - v;
|
||||
end;
|
||||
gcd_binary := u * k;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
Program GreatestCommonDivisorDemo(output);
|
||||
begin
|
||||
writeln ('GCD(', 49865, ', ', 69811, '): ', gcd_iterative(49865, 69811), ' (iterative)');
|
||||
writeln ('GCD(', 49865, ', ', 69811, '): ', gcd_recursive(49865, 69811), ' (recursive)');
|
||||
writeln ('GCD(', 49865, ', ', 69811, '): ', gcd_binary (49865, 69811), ' (binary)');
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue