isPrime() primefactors. , i == 2 2 n. (isPrime(i)) . while (n % i == 0) isPrime(n) n /= 2;. , n 100, isPrime() 50 25. . , , isPrime , .
i : n 1 , n, , , i , sqrt(n).
public String primefactors(int n) {
String factors = "";
int max_divisor = sqrt(n);
for (int i = 2; i <= max_divisor; i++) {
if (isPrime(i)) {
while (n % i == 0) {
n /= i;
if (n == 1)
factors = factors + Integer.valueOf(i).toString();
else
factors = factors + Integer.valueOf(i).toString() + "*";
}
max_divisor = sqrt(n);
}
}
if (n != 1)
factors = factors + Integer.valueOf(n).toString();
return factors;
}
( sqrt(n) isPrime()) O(n), i sqrt(n) isPrime sqrt(n).
, , isPrime(). , ( ). , , , sqrt(n). i , sqrt(n), , , isPrime() true.
, isPrime 113. : 2,3,5,7,11,13.... , 113 sqrt(113) (while (i <= 10)). 2,3,5,7 11 , 113 , true.
. , n O(n) . sqrt(n), O(sqrt(n)). , , sqrt(n) . , O(sqrt(n)). , 1024, 2, 10. , , 2.
isPrime()?
, , . . , n sqrt(n), . , - n % i == 0, , , , , n, isPrime(). O(sqrt(n)) :
public String primefactors(int n) {
String factors = "";
int max_divisor = sqrt(n);
for (int i = 2; i <= max_divisor; i++) {
while (n % i == 0) {
n /= i;
max_divisor = sqrt(n);
if (n == 1)
factors = factors + Integer.valueOf(i).toString();
else
factors = factors + Integer.valueOf(i).toString() + "*";
}
}
if (n != 1)
factors = factors + Integer.valueOf(n).toString();
return factors;
}
, if (n == 1) , .