|
一款可瞬间判定素数的神奇小软件
[这个贴子最后由数学爱好者A在 2008/09/24 03:02pm 第 1 次编辑]
Private Sub Command1_Click()
Dim aa(100000) As integer ';存放被加数的各位数字
Dim bb(100000) As integer ';存放加数的各位数字
Dim cc(100000) As integer ';存放和的各位数字
Dim Ln As integer ';此变量用来放字符串的长度时使用
Dim cd As Long
Dim ad as Long
Dim rd as Long
Dim dd as Long ';此四个变量运算时使用
a = Text1.Text
b = Text2.Text
GoSub sub1
Exit Sub ';主程序结束
sub1:
La = Len(a)
Ln=La
Rd=La mod 4
La=la\4 ';把 a 字串(被加数)转换成10000进制的各位数码放在数组 aa(i)中
For i = 1 To La ';aa(1)为最低位,
aa(i) = Val(Mid(a, Ln - 4*i + 1, 4))
Next i
if Rd>0 then
aa(i)=Val(Mid(a, 1, Rd))
La=La+1
Endif
Lb = Len(b) ';把 b 字串(加数)转换成10000进制的各位数码放在数组 bb(i)中
Ln=Lb
Rd=Lb mod 4
For i = 1 To Lb ';bb(1)为最低位,为最高位
bb(i) = Val(Mid(b, Lb - 4*i + 1, 4))
Next i
if Rd>0 then
bb(i)=Val(Mid(b, 1, Rd))
Lb=Lb+1
Endif
If La >= Lb Then LL = La Else LL = Lb
cd=0 ';进位置0
For i = 1 To LL
dd=0
dd=aa(i)+bb(i)+cd ';带进位加
rd=dd mod 10000 ';取出加后的第i位
cd= dd\10000 ';取出加后的进i位
cc(i)=rd
Next i
cc(i)=cd
c = ""
For i = 1 To LL + 1
c = Trim$(Str$(cc(i))) & c
Next i
Text3.Text = c
Return
End Sub
下面是Pascal代码
const TM=1000000000; //定义1000000000进制数的权
...............
function TForm1.GIntAdd(s1,s2:string):string; //从参数带入加数,返回和
var i,j,k,La,Lb,m,cd,dd,ad:integer;
aa,bb,cc:array of integer;
s:string;
begin
La := Length(s1);
Lb := Length(s2);
if La>=Lb then k := La else k :=Lb;
k :=k div 9; //确定数组长度(从10进制转换成1000000000进制)
k :=k+1;
SetLength(aa,k);
SetLength(bb,k);
SetLength(cc,k+1);
for i :=0 to k-1 do
begin
aa:=0;
bb:=0;
cc:=0
end;
cc:=0;
j := La mod 9;
m := La div 9;
m := m-1;
for i := 0 to m do
begin
s := Copy(s1,La-9*(i+1)+1,9);
aa :=StrToInt(Trim(s));
end;
if j>0 then
begin
s := Copy(s1,1,j);
aa :=StrToInt(Trim(s));
end;
j := Lb mod 9;
m := Lb div 9;
m := m-1;
for i := 0 to m do
begin
s := Copy(s2,Lb-9*(i+1)+1,9);
bb :=StrToInt(Trim(s));
end;
if j>0 then
begin
s := Copy(s2,1,j);
bb :=StrToInt(Trim(s));
end;
k :=k-1;
cd:=0;
for i :=0 to k do
begin
ad := aa+bb+cd;
dd := ad mod TM;
cd := ad div TM;
cc := dd;
end;
cc :=cd;
k :=k+1;
s:=';';;
for i := 0 to k do
s:=IntToStr(cc)+s;
Result := s;
end;
这部分代码经过调试验证,没有问题。下面是验证结果
28253485967575738487667658577347623
+ 8447465254567417888684765423567874857
---------------------------------------------------------------------
8475718740534993627172433082145222480 |
|