langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
|
|
@ -0,0 +1,7 @@
|
|||
function gcd_recursive(u, v: longint): longint;
|
||||
begin
|
||||
if u mod v <> 0 then
|
||||
gcd_recursive := gcd_recursive(v, u mod v)
|
||||
else
|
||||
gcd_recursive := v;
|
||||
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