讨论 / 。。。求数据
zjlsykw3636 2011-06-23 07:32:00
点我顶贴 收藏 删除
虽然我知道这个要求很龌龊。。。

测试结果1: 通过本测试点|有效耗时172:ms

测试结果2: 通过本测试点|有效耗时47:ms

测试结果3: 测试结果错误.

错误结果为:80062991

正确结果应为:43729691

测试结果4: 通过本测试点|有效耗时47:ms

测试结果5: 测试结果错误.

错误结果为:13563783707049367381

正确结果应为:1618030885559322623

求3、5的数据

不介意的话帮我分析下程序漏洞。

(很垃圾的算法)

var

q:array[1..120] of integer;

sum:qword;

m,n,i,i1,i2,i3,i4,i5,j,link:word;

a:integer;

b:boolean;

begin

read(m,n);

case m of

1:

begin

for i1:=1 to n do

begin

b:=true;

for j:=2 to trunc(sqrt(i1)) do

if (i1 mod j=0) then begin b:=false;break;end;

if b then begin inc(link);q[link]:=i1; end

else b:=true;

end;

sum:=1;

for i:=1 to link do

sum:=sum*q[link];

if sum=1 then sum:=0;

writeln(sum);

end;

2:

begin

for i1:=1 to n do

for i2:=1 to n do

if i1<>i2 then

begin

b:=true;a:=i1*10+i2;

for j:=2 to trunc(sqrt(a)) do

if (a mod j=0) then begin b:=false;break;end;

if b then begin inc(link);q[link]:=a; end

else b:=true;

end;

sum:=1;

for i:=1 to link do

sum:=sum*q[i];

if sum=1 then sum:=0;

writeln(sum);

end;

3:

begin

for i1:=1 to n do

for i2:=1 to n do

for i3:=1 to n do

if (i1<>i2)and(i2<>i3)and(i1<>i3) then

begin

b:=true;a:=i1*100+i2*10+i3;

for j:=2 to trunc(sqrt(a)) do

if (a mod j=0) then begin b:=false;break;end;

if b then begin inc(link);q[link]:=a; end

else b:=true;

end;

sum:=1;

for i:=1 to link do

sum:=sum*q[link];

if sum=1 then sum:=0;

writeln(sum);

end;

4:

begin

for i1:=1 to n do

for i2:=1 to n do

for i3:=1 to n do

for i4:=1 to n do

if (i1<>i2)and(i2<>i3)and(i1<>i3)and(i1<>i4)and(i2<>i4)and(i3<>i4) then

begin

b:=true;a:=i1*1000+i2*100+i3*10+i4;

for j:=2 to trunc(sqrt(a)) do

if (a mod j=0) then begin b:=false;break;end;

if b then begin inc(link);q[link]:=a; end

else b:=true;

end;

sum:=1;

for i:=1 to link do

sum:=sum*q[link];

if sum=1 then sum:=0;

writeln(sum);

end;

5:

begin

for i1:=1 to n do

for i2:=1 to n do

for i3:=1 to n do

for i4:=1 to n do

for i5:=1 to n do

if (i1<>i2)and(i2<>i3)and(i1<>i3)and(i1<>i4)and(i2<>i4)and(i3<>i4)

and(i1<>i5)and(i2<>i5)and(i3<>i5)and(i4<>i5)then

begin

b:=true;a:=i1*10000+i2*1000+i3*100+i4*10+i5;

for j:=2 to trunc(sqrt(a)) do

if (a mod j=0) then begin b:=false;break;end;

if b then begin inc(link);q[link]:=a; end

else b:=true;

end;

sum:=1;

for i:=1 to link do

sum:=sum*q[link];

if sum=1 then sum:=0;

writeln(sum);

end;

end;

end.

#1 zjlsykw3636@2008-11-10 06:30:00
回复 删除
.。。。没人理我 — —||
#2 xiaokeke@2008-11-10 14:03:00
回复 删除
我用递归写的,所以帮不上忙拉……
#3 誉满苍穹@2011-06-23 07:32:00
回复 删除
劝你还是

用回逆吧

查看更多回复
提交回复