CSDN博客

img dhunter

数论算法

发表于2004/10/29 4:42:00  717人阅读

分类: Alogrithms

一、数论算法
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}

0 0

相关博文

我的热门文章

img
取 消
img