标签:strong pre 因子 大于 tor 空间复杂度 href pac amp
以sqrt(n)? 为时间复杂度的算法并不多见,最具代表性的就是分解质因数了。
将一个整数分解为若干质因数之乘积。
样例 1:
输入:10
输出:[2, 5]
样例 2:
输入:660
输出:[2, 2, 3, 5, 11]
你需要从小到大排列质因子。
class Solution: """ @param num: An integer @return: an integer array """ def primeFactorization(self, num): # write your code here result = [] k = 2 while k*k <= num: if num % k == 0: num = num//k result.append(k) else: k += 1 if num > 1: result.append(num) return result
http://www.lintcode.com/problem/prime-factorization/
Java:
public List<Integer> primeFactorization(int n) {
List<Integer> result = new ArrayList<>();
int up = (int) Math.sqrt(n);
for (int k = 2; k <= up && n > 1; ++k) {
while (n % k == 0) {
n /= k;
result.add(k);
}
}
if (n > 1) {
result.add(n);
}
return result;
}
Python:
def primeFactorization(n):
result = []
up = int(math.sqrt(n));
k = 2
while k <= up and n > 1:
while n % k == 0:
n //= k
result.append(k)
k += 1
if n > 1:
result.append(n)
return result
C++:
vector<int> primeFactorization(int n) {
vector<int> result;
int up = (int)sqrt(n);
for (int k = 2; k <= up && n > 1; ++k) {
while (n % k == 0) {
n /= k;
result.push_back(k);
}
}
if (n > 1) {
result.push_back(n);
}
return result;
}
质因数分解有一种更快的算法,叫做Pollard Rho快速因数分解。该算法时间复杂度为O(n1/4)O(n^{1/4})O(n1/4),其理解起来稍有难度,有兴趣的同学可以进行自学,参考链接。
标签:strong pre 因子 大于 tor 空间复杂度 href pac amp
原文地址:https://www.cnblogs.com/bonelee/p/11788524.html