oops lol
This commit is contained in:
parent
6286d07611
commit
4b0b0186f2
1 changed files with 0 additions and 76 deletions
|
@ -1,76 +0,0 @@
|
||||||
with Ada.Strings; use Ada.Strings;
|
|
||||||
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
|
|
||||||
|
|
||||||
package body Module is
|
|
||||||
|
|
||||||
function factorial(n : Natural) return Natural is
|
|
||||||
begin
|
|
||||||
if (n = 0 or n = 1 ) then
|
|
||||||
return 1;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
return n * factorial(n - 1);
|
|
||||||
end factorial;
|
|
||||||
|
|
||||||
function gcd(a : Natural; b : Natural) return Natural is
|
|
||||||
begin
|
|
||||||
if b = 0 then
|
|
||||||
return a;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
return gcd(b, a mod b);
|
|
||||||
end gcd;
|
|
||||||
|
|
||||||
function gcdExtended(a : Integer; b : Integer; x : out Integer; y : out Integer) return Integer is
|
|
||||||
x1 : Integer;
|
|
||||||
y1 : Integer;
|
|
||||||
d : Integer;
|
|
||||||
begin
|
|
||||||
if b = 0 then
|
|
||||||
x := 1;
|
|
||||||
y := 0;
|
|
||||||
return a;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
d := gcdExtended(b, a rem b, x1, y1);
|
|
||||||
|
|
||||||
x := y1;
|
|
||||||
y := x1 - y1 * (a / b);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
end gcdExtended;
|
|
||||||
|
|
||||||
function diophantine(a : Integer; b : Integer; c : Integer) return Result is
|
|
||||||
r : Result;
|
|
||||||
x0 : Integer := 0;
|
|
||||||
y0 : Integer := 0;
|
|
||||||
g : Integer := gcdExtended(abs a, abs b, x0, y0);
|
|
||||||
begin
|
|
||||||
r.n := 0;
|
|
||||||
r.m := 0;
|
|
||||||
r.resultExists := False;
|
|
||||||
|
|
||||||
if a = 0 and b = 0 then
|
|
||||||
return r;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
if (c rem g) /= 0 then
|
|
||||||
return r;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
x0 := x0 * (c / g);
|
|
||||||
y0 := y0 * (c / g);
|
|
||||||
if a < 0 then
|
|
||||||
x0 := -x0;
|
|
||||||
end if;
|
|
||||||
if b < 0 then
|
|
||||||
y0 := -y0;
|
|
||||||
end if;
|
|
||||||
r.n := x0;
|
|
||||||
r.m := y0;
|
|
||||||
r.resultExists := True;
|
|
||||||
|
|
||||||
return r;
|
|
||||||
end diophantine;
|
|
||||||
|
|
||||||
end Module;
|
|
Loading…
Reference in a new issue