【发布时间】:2015-10-24 01:39:41
【问题描述】:
我真的需要一些帮助来解决这个问题:
给定一个正整数
N,我们将xsum(N)定义为所有小于或等于N的正整数除数之和。例如:xsum(6) = 1 + (1 + 2) + (1 + 3) + (1 + 2 + 4) + (1 + 5) + (1 + 2 + 3 + 6) = 33 .
(xsum - 1 的除数总和 + 2 的除数总和 + ... + 6 的除数总和)给定一个正整数
K,要求您找到满足条件的最小N:xsum(N) >= KK 是一个非零自然数,最多有 14 位数字
时间限制:0.2 秒
显然,在超过时间限制的大多数情况下,蛮力将下降。我还没有找到比它更好的东西,所以这就是代码:
fscanf(fi,"%lld",&k);
i=2;
sum=1;
while(sum<k) {
sum=sum+i+1;
d=2;
while(d*d<=i) {
if(i%d==0 && d*d!=i)
sum=sum+d+i/d;
else
if(d*d==i)
sum+=d;
d++;
}
i++;
}
有更好的想法吗?
【问题讨论】:
-
14位表示14位?还是十进制数字?反正。这个问题是题外话。 SO 不是 code-rview 站点。如果您的代码有效,请尝试code review。但首先阅读他们的常见问题解答(您显然没有阅读 SO)!
-
14 位十进制数字。我的代码有效,我之所以写它是因为我阅读了您必须展示您的工作、您尝试做什么等规则。
标签: c algorithm optimization