回 帖 发 新 帖 刷新版面

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

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

回复列表 (共13个回复)

沙发

显然必须选择约数尽可能多的数。
由于总和不超过S,因此最大的约数不能超过TRUNC(S/2)。

还要考虑一个重要的性质:
两个数的和一定,它们的差越大,积越小。

因此只要取最大的数(TRUNC(S/2))和2的积,同时保证这个最大的数的约数尽可能多。

板凳

请讲明原理,感觉看起来糊里糊涂...~真晕!!?~~~~
(PS:S未知!问题:如何求S!)

3 楼


我也看不懂耶~~[em8][em8]

4 楼

XXXXXXX...~~

5 楼

看不懂`~~~~~```

6 楼

我的解答,大家看看
program solve;
 var t,n,m:longint;
 function tot(n:longint):longint;
   var i,s: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);
     tot:=s;
   end;
 begin
  readln(n);
  m:=n mod 6;
  t:=tot(n-m);
  if (m>1)and(m<=3) then t:=t+1;
  if (m>=4)and(m<=5) then t:=t+3;
  writeln(t);
  end.

7 楼

是否可以证明,对6M+D,是否可以证明(6M,及D可取最大可约数)的约数和+是最大的呢?
6M,----1,2,3,M,2M,3M
6M+1,
6M+2,---1,2,3M+1
6M+3,---1,3,2M+1
6M+4,---1,2,3M+2
6M+5;

8 楼

如果可以证明一个数(6M+D)取得最大约数和时,一定是两个数,且其中一个数是6M到6M+D之间那就好办
是否成立呢????THINKING-----------------

9 楼

不好意思,错了,应该是这样
n1*m1!+n2*m2!+....m1要尽量大,然后n1要尽量大,再M2类似,N2类似。。。。这样处理就可以得出
查分得几个数,再求约数和

10 楼

我又想了一下,应符合两个原则1.约数相异2.约数要多。那可以这样做
用ZHI数组保存质数ZHI[1]:=2,ZHI[2]:=3.......
对于S,
T:=ZHI[1]*ZHI[2]*....ZHI[N],刚好T*ZHI[N+1]>S,再T*ZHI[1]*....ZHI[M]刚好ZHI[M+1]*T>S,
重复,直到T不能再乘任何质数,T为要求的拆分的第一个数,类似可的第二个数,第三个...
再把每个数的约数加起来就是所要求得结果,等下我给出程序来,大家看看

我来回复

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