具有两个或更多素数因子的数字

时间:2016-02-13 09:17:21

标签: primes prime-factoring greatest-common-divisor

@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)吗?

提前致谢!

0 个答案:

没有答案