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)
, .