主题:“重完全数”
96131
[专家分:0] 发布于 2006-04-20 17:31:00
6的因子有1,2,3,6,它们的和是12,这个和恰好是原数的2倍,我们把6叫作二重完全数。120的因子有1,2,3,4,5,6,8,10,12,15,20,24,30,40,60,120,它们的和是360,这恰好是原数的3倍,我们把120叫作三重完全数。请编程序,再找出一个三重完全数。
回复列表 (共7个回复)
沙发
maxumi [专家分:2200] 发布于 2006-04-21 09:23:00
program lx;
var
haveanswer:boolean;
begin
haveanswer:=false;
i:=1;
repeat
ss:=0;
for m:=1 to trunc(sqrt(i)) do
if i mod m=0 then begin
ss:=ss+m;
if m<>(i div m) then ss:=ss+(i div m);
end;
if ss=i*3 then haveanswer=true;
until haveanswer=true;
writeln(i);
end.
我没调试过, 你自己试试吧.
板凳
maxumi [专家分:2200] 发布于 2006-04-21 09:24:00
在until一句前面还有一句:
i:=i+1;
3 楼
96131 [专家分:0] 发布于 2006-04-21 11:00:00
我调试给你打分,谢谢支持
4 楼
游侠UFO [专家分:1200] 发布于 2006-04-21 20:46:00
搜索
5 楼
96131 [专家分:0] 发布于 2006-04-21 21:22:00
maxumi朋友你给的程序没有经过调试,问题太多,我不知道如何理解,你能调试好后在发吗?谢谢
6 楼
caseissamll [专家分:110] 发布于 2006-04-22 10:09:00
var i,n,k,s:integer;a:packed array[1..100] of integer;
begin
k:=0;{搜索}
repeat
k:=k+1;s:=0;n:=1;
for i:=1 to k do
if k mod i=0 then
begin a[n]:=i;n:=n+1;{求出因子} end;
for i:=1 to n-1 do s:=s+a[i];
until (k*3=s)and(k<>120);{只求一个跳出}
for i:=1 to n-1 do write(a[i]:4);
writeln;
write(k:10);
readln
end.
运行结果:
1 2 3 4 6 7 8 12 14 16 21 24 28 32 42 48 56 84 96 112 168 224 336 672
672
验证正确
7 楼
96131 [专家分:0] 发布于 2006-04-22 21:06:00
太谢谢了caseissamll朋友
我来回复