我们枚举每一个 x,代入计算即可。
for(int i=2;i<=n;i++){
int s=0;
for(int k=1;k*i<=n;k++){
s+=k*i;
}
if(s>mx) mx=s,mxi=i;
}
时间复杂度为 O(nlogn)。(证明:内层语句的执行次数为 i=2∑n⌊in⌋,即为 ni=2∑n⌊i1⌋,右半式为调和级数,渐进复杂度为 O(lnn),总时间复杂度为 O(nlnn) 等于 O(nlogn)。)
一个更优的方法是枚举+推式子。考虑 S 的形式为 i=1∑⌊n/x⌋ix。变形为 xi=1∑⌊n/x⌋i,右边可以套公式知道结果为 2⌊xn⌋×(⌊xn⌋+1)。所以,S 的值为 x2⌊xn⌋×(⌊xn⌋+1),枚举 x 即可,时间复杂度为 O(n)。代码很简单,就不贴了。
有帮助,赞一个