J
jy02113184
Unregistered / Unconfirmed
GUEST, unregistred user!
以下是我的算法,不过速度还不是很理想
function IsPrime(n:integer):boolean
//返回n是否素数,n>=2
var i:integer;
begin
i:=2;
while i<=sqrt(n+2) do
if ( n mod i = 0 ) then //i能整除n吗?
begin
IsPrime:=false
//n不是素数
exit;
end
else
i:=i+1;
IsPrime:=true; //n是素数
end;
{$R *.dfm}
procedure TForm1.btnsumClick(Sender: TObject);
var
flag,FstNum,SndNum,total:integer;
begin
lxbtotal.Clear;
FstNum:=1;
SndNum:=1;
total:=strtoint(Edtname.text);
if (total>99999) and (total mod 2=0) then //判断输入的数是否是大于6位数的偶数
begin
Form1.Caption:='计算中。。。。。。';
while SndNum>=FstNum do//当第一个数比第二个数大时跳出循环
begin
FstNum:=FstNum+2;
SndNum:=total-FstNum;//两个数分别累加与累减,且两数的值和为输入的数
if (IsPrime(FstNum)) and (IsPrime(SndNum)) then//判断两数是否为素数
begin
lxbtotal.Items.Strings[flag]:=(inttostr(total)+'='+inttostr(FstNum)+'+'+inttostr(SndNum));//输出判断后的值
Edtname.SetFocus;
flag:=flag+1;
end;
end;
Form1.Caption:='计算完毕';
end
else
begin
lxbtotal.Items.Add(inttostr(total)+'小于6位数或为奇数');//超出范围的提示
Edtname.SetFocus;
end
end;
function IsPrime(n:integer):boolean
//返回n是否素数,n>=2
var i:integer;
begin
i:=2;
while i<=sqrt(n+2) do
if ( n mod i = 0 ) then //i能整除n吗?
begin
IsPrime:=false
//n不是素数
exit;
end
else
i:=i+1;
IsPrime:=true; //n是素数
end;
{$R *.dfm}
procedure TForm1.btnsumClick(Sender: TObject);
var
flag,FstNum,SndNum,total:integer;
begin
lxbtotal.Clear;
FstNum:=1;
SndNum:=1;
total:=strtoint(Edtname.text);
if (total>99999) and (total mod 2=0) then //判断输入的数是否是大于6位数的偶数
begin
Form1.Caption:='计算中。。。。。。';
while SndNum>=FstNum do//当第一个数比第二个数大时跳出循环
begin
FstNum:=FstNum+2;
SndNum:=total-FstNum;//两个数分别累加与累减,且两数的值和为输入的数
if (IsPrime(FstNum)) and (IsPrime(SndNum)) then//判断两数是否为素数
begin
lxbtotal.Items.Strings[flag]:=(inttostr(total)+'='+inttostr(FstNum)+'+'+inttostr(SndNum));//输出判断后的值
Edtname.SetFocus;
flag:=flag+1;
end;
end;
Form1.Caption:='计算完毕';
end
else
begin
lxbtotal.Items.Add(inttostr(total)+'小于6位数或为奇数');//超出范围的提示
Edtname.SetFocus;
end
end;