注意:我遗漏了不相关的代码
所以我目前正在研究CCC 1996 P1,这个问题的全部目的是能够计算整数输入是完美的,不足的还是丰富的数字。我上面列出的代码可行,但我觉得它太慢了。代码,遍历每个数字,以找到完美的除数,我认为这是非常低效的。无论如何,我一直在考虑这个问题,但似乎无法想出任何优化此代码的方法。
我在网上看到你可以替换i< n,i< sqrt(n)然后切换添加得分的行到s + = i +(n / i),或者某种类型的行,但是,这对我来说似乎不起作用。有关如何获得更高效代码和减少运行时间的任何建议,因为目前程序在到达输出之前运行的时间太长。非常感谢任何帮助,谢谢!
此外,如果所有完美除数的总和等于数字,则数字被定义为完美。如果所有完美除数的总和> 1,则数被定义为丰富。数字。如果所有完美除数的总和<1,则将数字定义为不足。数字。这个数字本身并不算是一个完美的除数。
我对Big-O符号不太熟悉。
此外,如果所有完美除数的总和等于数字,则数字被定义为完美。如果所有完美除数的总和> 1,则数被定义为丰富。数字。如果所有完美除数的总和<1,则将数字定义为不足。数字。这个数字本身并不算是一个完美的除数。
答案 0 :(得分:1)
你应该替换
score += i + ((sqrt(numInput))/i);
与
result = numInput/i;
score += (result == i || i == 1)? i : i + result;
这个想法是,对于小于平方根的每个因子,结果总是大于或等于平方根,也是一个因子。