Pascal 递归问题求解、、
哥德巴赫的猜想之一是任何大于5的奇数都可以表示为3个素数之和。请用10个大于5的奇数验证这一论断。奇数用随机函数产生,把验证编写为过程,打印出每个数和组成该数的3个素数。...
哥德巴赫的猜想之一是任何大于5的奇数都可以表示为3个素数之和。请用10个大于5的奇数验证这一论断。奇数用随机函数产生,把验证编写为过程,打印出每个数和组成该数的3个素数。
PS:刚接触递归,如果有简要解说更好、要P语言的、 展开
PS:刚接触递归,如果有简要解说更好、要P语言的、 展开
1个回答
展开全部
楼主也没说上限这里就只验证1000以内的了
var
a,i,j,k,s:longint;
zs:array[1..1000] of longint;
f,f1:boolean;
ans:array[1..3] of longint;
procedure try(a,t:longint);
var
i:longint;
begin
if t>3 then//边界条件(个数大于三个)
begin
if a=0 then f1:=true;//如果此时三个数的和正好等于a那么表示找到答案,把控制输出的f1变为true
exit;
end;
if (a=0) and (t<3) then exit;//如果数字的和已经为a但是个数少于3个那么也跳出
for i:=1 to j do//枚举质数
begin
try(a-zs[i],t+1);//a 减去该质数,个数t加1进入下一层
if f1 then//如果f1为true说明已经找到答案,把答案存入ans中
begin
inc(s);
ans[s]:=zs[i];
exit;
end;
end;
end;
begin
j:=1; zs[j]:=2; i:=2;
while zs[j]<100 do
begin
inc(i);
f:=true;
for k:=2 to i div 2+1 do
if i mod k=0 then
begin
f:=false;
break;
end;
if f then
begin
inc(j);
zs[j]:=i;
end;
end; //从开始到这里为止在求100以内的质数,不解释
randomize;
for i:=1 to 10 do
begin
a:=random(995)+6; //随机产生一个5到1000的数
while a mod 2=0 do a:=random(995)+6; //确保这个数字是奇数
try(a,1); //调用过程,其中a为随机生成的那个奇数,t为已分解的质数数
write(a,'=');
write(ans[1],'+'); write(ans[2],'+');
writeln(ans[3]); //以上三句输出结果
s:=0; f1:=false; //指针复位
end;end.
var
a,i,j,k,s:longint;
zs:array[1..1000] of longint;
f,f1:boolean;
ans:array[1..3] of longint;
procedure try(a,t:longint);
var
i:longint;
begin
if t>3 then//边界条件(个数大于三个)
begin
if a=0 then f1:=true;//如果此时三个数的和正好等于a那么表示找到答案,把控制输出的f1变为true
exit;
end;
if (a=0) and (t<3) then exit;//如果数字的和已经为a但是个数少于3个那么也跳出
for i:=1 to j do//枚举质数
begin
try(a-zs[i],t+1);//a 减去该质数,个数t加1进入下一层
if f1 then//如果f1为true说明已经找到答案,把答案存入ans中
begin
inc(s);
ans[s]:=zs[i];
exit;
end;
end;
end;
begin
j:=1; zs[j]:=2; i:=2;
while zs[j]<100 do
begin
inc(i);
f:=true;
for k:=2 to i div 2+1 do
if i mod k=0 then
begin
f:=false;
break;
end;
if f then
begin
inc(j);
zs[j]:=i;
end;
end; //从开始到这里为止在求100以内的质数,不解释
randomize;
for i:=1 to 10 do
begin
a:=random(995)+6; //随机产生一个5到1000的数
while a mod 2=0 do a:=random(995)+6; //确保这个数字是奇数
try(a,1); //调用过程,其中a为随机生成的那个奇数,t为已分解的质数数
write(a,'=');
write(ans[1],'+'); write(ans[2],'+');
writeln(ans[3]); //以上三句输出结果
s:=0; f1:=false; //指针复位
end;end.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询