Какова будет сложность этой программы для поиска простых множителей числа.И как можно улучшить его (учитывая только временную сложность, а не стандарты кодирования или пространственную сложность).
Спасибо и привет.
См. Исходный код:
function primes(n) {
let primeNumbers = [2];
if (n < 2) {
return [];
} else if (n == 2) {
return [2];
}
for (let i = 3; i <= n; i++) {
let x = i;
let j = 0;
let isPrime = true;
while (j < primeNumbers.length && primeNumbers[j] <= Math.sqrt(i)) {
if (x % primeNumbers[j] == 0) {
isPrime = false;
break;
} else {
j++;
}
}
if (isPrime) {
primeNumbers.push(x);
} else {}
}
return primeNumbers;
}
function primeFactors(n) {
let primeNumbers = primes(Math.sqrt(n));
let i = 0;
let x = n;
if (n == 1) {
return [1];
}
if (n == 2) {
return [2];
}
let primeFactors = [];
while (i < primeNumbers.length) {
while (x % primeNumbers[i] == 0) {
primeFactors.push(primeNumbers[i])
x = x / primeNumbers[i];
if (x == 1) {
break;
}
}
if (x == 1) {
break;
}
i++;
}
if (x == 1) {} else if (x > 2) {
primeFactors.push(x);
}
return primeFactors;
}
console.log("test : " + primes(122));