主题:[原创]菜鸟问题 请教一下
编程黑客
[专家分:1660] 发布于 2006-07-29 11:02:00
哥德巴赫猜想:将一个奇数拆分成三个素数之和。
要求:素数按从小到大且是最小的两个素数与另一个素数组合
如: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.
答案有的对有的错,请大虾在原题上修改并跟帖发送,菜鸟感谢不已!!!
回复列表 (共16个回复)
沙发
编程黑客 [专家分:1660] 发布于 2006-07-29 15:29:00
各位,快回啊!···
板凳
PascalCon [专家分:30] 发布于 2006-07-29 16:54:00
错在哥德巴赫,说明他的猜想是错的撒.
PS:我也菜,什么是素数?
3 楼
编程黑客 [专家分:1660] 发布于 2006-07-29 21:43:00
素数就是质数,同志!!!
哥德巴赫猜想是对的,你不用怀疑
4 楼
贺天行宝 [专家分:2300] 发布于 2006-07-30 09:33:00
ss(j)+ss(i-j)=2
为什么这些加起来就是n,还有你不会编个两重循环再编个三重循环来做?你这样烦不烦?
5 楼
编程黑客 [专家分:1660] 发布于 2006-07-30 10:33:00
有一个数是素数,一个SS就为1。ss(j)+ss(i-j)=2就说明两个都是素数。
在之前,判断到M-I为素数,然后就把I分成两个素数的和,而M-J加I是N,那M-J,J,I-J加起来就也是N了。
还有“编个两重循环再编个三重循环来做”是什么意思?请说明白点。
6 楼
dorremon1992 [专家分:870] 发布于 2006-07-30 16:02:00
for i=先穷举数 do
for j=再穷举素数 do
...
if 判断=T then Write
...
7 楼
dorremon1992 [专家分:870] 发布于 2006-07-30 16:05:00
如果用穷举
可以做个素数表,然后再根据表来凑数,
效率会比较高一点
O(n)
8 楼
济公二世 [专家分:200] 发布于 2006-08-19 16:54:00
program tt;
const maxn=10;
var dd:array[1..maxn] of integer;
d,a,n,i,j,z,k:integer;
procedure t(i:integer);{n以内的质数按从小到大的顺序存入dd}
begin
for a:=2 to trunc(sqrt(i)) do
if i mod a=0 then
exit;
dd[k]:=i;
k:=k+1;
end;
procedure ttt;{n等于三个质数的和}
begin
for i:=1 to k do
for j:=1 to k do
for z:=1 to k do
if dd[i]+dd[j]+dd[z]=n then
begin
writeln( n,'=',dd[i],'+',dd[j],'+',dd[z]);
exit;
end;
end;
begin
readln(n);
dd[1]:=2;k:=2;
for d:=3 to n do
t(d);
ttt;
end.
做完了,好不好就看你怎么说了.
[em9][em9][em9][em9][em9][em1]
9 楼
济公二世 [专家分:200] 发布于 2006-08-19 16:56:00
帮你把题目补充一下,是非质数的奇数,不然的话3,5,13.....这些你怎么用3个质数加呀?
10 楼
wyb5699987 [专家分:40] 发布于 2006-09-25 21:09:00
你先给那个奇数减去一个数3;
这样就相当于求一个偶数可以分解成两个素数之和了啊
我来回复