@override
public String toString() {
String output;
output += "Author: " + author + "\n";
output += "Title: " + title + "\n";
output += "Pages: " + pages + "\n";
return output;
}
这是给出n时要计算的实际函数。 n的上限为1e6,时间限制为2秒。直接使用上述功能将明显超过时限。所以,我想出了以下解决方案。它适用于小型情况,但在N> = 100时无法通过。 这是c ++代码:
def fun(n) :
ans = 0
for i in range(1,n) :
for j in range(i+1,n+1) :
ans += gcd(i,j)
这里的问题是,如果有n-i使得它有两个素因子,那么这个算法会失败,因为值i i大于i且小于n只会考虑gcd计算一次。例如,如果n-i为25,那么它的素数因子将是2,3,5。这里将在3和5处考虑15次。请帮助我在用3执行动作后如何消除15。
或者还有其他方法可以在O(n ^ 2)以下更快地计算函数fun(n)吗?
提前致谢!