一、数论算法
1.求两数的最大公约数
function gcd(a, b: Integer): Integer;
begin
if b = 0 then
gcd := a
else
gcd := gcd(b, a mod b);
end;
2.求两数的最小公倍数
function lcm(a, b: Integer): Integer;
begin
if a < b then
Swap(a, b);
lcm := a;
while lcm mod b > 0 do
Inc(lcm, a);
end;
3.素数的求法
A.小范围内判断一个数是否为质数:
function prime(n: Integer): Boolean;
var
I: Integer;
begin
for I := 2 to Trunc(Sqrt(n)) do
if n mod I = 0 then
begin
prime := false;
Exit;
end;
prime := true;
end;
B.判断Longint范围内的数是否为素数(包含求50000以内的素数表):
procedure getprime;
var
i, j: Longint;
p: array[1..50000] of Boolean;
begin
FillChar(p, SizeOf(p), true);
p[1] := false;
i := 2;
while i < 50000 do
begin
if p[i] then
begin
j := i * 2;
while j < 50000 do
begin
p[j] := false;
Inc(j, i);
end;
end;
Inc(i);
end;
l := 0;
for i := 1 to 50000 do
if p[i] then
begin
Inc(l);
pr[l] := i;
end;
end;{getprime}
function prime(x: Longint): Integer;
var
i: Integer;
begin
prime := false;
for i := 1 to l do
if pr[i] >= x then
Break
else if x mod pr[i] = 0 then
Exit;
prime := true;
end;{prime}
数论算法
最新推荐文章于 2023-04-18 14:30:49 发布