回 帖 发 新 帖 刷新版面

主题:[原创]最大约数和

问题描述:
    选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入数据:输入一个正整数S。
输出数据:输出最大的约数之和。
样例输入
11
样例输出
9
样例说明:取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。
时间限制:各测试点1秒

回复列表 (共13个回复)

11 楼

程序如下,怎样?对吧!~当然我没用高精算法,LONGINT也可以吧!如果有问题,希望大家帮忙,谢谢!
program zuidayueshu;
 var zhi:array[2..97]of integer;
 t,m,n,s,i,j,x:longint;w:set of 2..97;
 function qiuhe(n:longint):longint;
   var s,i:longint;
   begin
   s:=1;
   if trunc(sqrt(n))=sqrt(n) then s:=s-trunc(sqrt(n));
   for i:=2 to trunc(sqrt(n))  do
       if n mod i=0 then s:=s+i+n div i;
     qiuhe:=s;
   end;
 begin
 readln(s);
 w:=[2..97];x:=2;i:=0;
 repeat

   while not (x in w) do
     x:=x+1;
     inc(i);zhi[i]:=x;j:=x;
     while j in w do
      begin
         w:=w-[j];
         j:=j+x;
       end;
    until w=[];
    n:=0;
 repeat
    m:=1;
    while (s-m*2)>0 do
      begin
       t:=1;i:=0;
       while (s-t*m*(zhi[i+1]))>0 do
        begin
          inc(i);
          t:=t*zhi[i];
        end;
        m:=t*m;
       end;
       writeln('-->',m);s:=s-m;
       n:=n+qiuhe(m)
     until  s<=1;
    write('<',n,'>');
end.

12 楼

该给出正确答案了吧!!!!!!!!谢谢了

13 楼


应该用01背包的思想做吧。
用dp可以大大的提高效率!

我来回复

您尚未登录,请登录后再回复。点此登录或注册