主题:[原创]菜鸟问题 请教一下
哥德巴赫猜想:将一个奇数拆分成三个素数之和。
要求:素数按从小到大且是最小的两个素数与另一个素数组合
如:15=2+2+11
15=3+5+7等,程序要求只输出前一种拆分方法。
样例:
输入:15
输出:15=2+2+11
要求:用子程序实现判素数
我编的是
var m,n,i,j:integer;
function ss(x:integer):integer;
var k,f:integer;
begin
f:=1;
for k:=2 to trunc(sqrt(x)) do
if x mod k=0 then begin
f:=0;
break;
end;
ss:=f;
end;
begin
read(n);
m:=n;
for i:=2 to m-1 do
if ss(i)+ss(m-i)=1 then if ss(i)=0 then
begin
for j:=2 to i-1 do
if ss(j)+ss(i-j)=2 then
begin
writeln(n,'=',m-i,'+',j,'+',i-j);
exit;
end;
end
else
begin
for j:=2 to m-i-1 do
if ss(j)+ss(m-i-j)=2 then
begin
writeln(n,'=',i,'+',j,'+',m-i-j);
exit;
end;
end;
end.
答案有的对有的错,请大虾在原题上修改并跟帖发送,菜鸟感谢不已!!!
要求:素数按从小到大且是最小的两个素数与另一个素数组合
如:15=2+2+11
15=3+5+7等,程序要求只输出前一种拆分方法。
样例:
输入:15
输出:15=2+2+11
要求:用子程序实现判素数
我编的是
var m,n,i,j:integer;
function ss(x:integer):integer;
var k,f:integer;
begin
f:=1;
for k:=2 to trunc(sqrt(x)) do
if x mod k=0 then begin
f:=0;
break;
end;
ss:=f;
end;
begin
read(n);
m:=n;
for i:=2 to m-1 do
if ss(i)+ss(m-i)=1 then if ss(i)=0 then
begin
for j:=2 to i-1 do
if ss(j)+ss(i-j)=2 then
begin
writeln(n,'=',m-i,'+',j,'+',i-j);
exit;
end;
end
else
begin
for j:=2 to m-i-1 do
if ss(j)+ss(m-i-j)=2 then
begin
writeln(n,'=',i,'+',j,'+',m-i-j);
exit;
end;
end;
end.
答案有的对有的错,请大虾在原题上修改并跟帖发送,菜鸟感谢不已!!!