我必须找到小于或等于mapValue
的最大数字并除以SQUARE_ROOT(N)
。
最直接的解决方案是 O(SQUARE_ROOT(N)),是否有任何 O(logN)解决方案,因为数量可以在 10 ^范围内变化很大18
答案 0 :(得分:1)
如果N
等于p*q
,其中p
和q
是素数,您应该首先找到这个素数来回答您的问题。所以这个问题一般不比Integer factorization容易。并且没有已知的具有O(logN)复杂度的算法。
没有公布可以在多项式时间内对所有整数进行因子分解的算法,即,对于某些常数k,可以在时间O(b ^ k)中考虑b比特数。这种算法的存在和不存在都没有得到证实,但通常怀疑它们不存在,因此问题不在P类中。问题显然在NP类中,但尚未被证明是不是NP完整的。通常怀疑它不是NP完全的。
你可以在不同的factorization algorithms找到有用的东西。
答案 1 :(得分:-1)
如果N是复合的,那么
N = MaximumDivisor(N) * MinimumDivisor(N).