ianbrandt
06/25/2018, 3:25 AMfor
loops in Kotlin? Perhaps a functional approach?
fun primeFactorsOf(integer: Int): List<Int> {
val primeFactors = mutableListOf<Int>()
var n = integer
var divisor = 2
while (n > 1) {
while (n % divisor == 0) {
primeFactors.add(divisor)
n /= divisor
}
divisor++
}
return primeFactors
}
For comparison, a Java implementation with C-style loops:
public static List<Integer> primeFactorsOf(int integer) {
List<Integer> primeFactors = new ArrayList<>();
for (int divisor = 2; integer > 1; divisor++)
for (; integer % divisor == 0; integer /= divisor)
primeFactors.add(divisor);
return primeFactors;
}
gildor
06/25/2018, 5:06 AMwhile
for much-much better readability and simplicity
And It’s good example why C-style for
is dropped 🙈dalexander
06/25/2018, 1:11 PMtailrec fun primeFactorization(number: Int, divisor: Int = 2, res: MutableList<Int> = mutableListOf()): List<Int> {
if(number <= 1) {
return res
}
val (nextNumber, nextDivisor) = if(number % divisor == 0) {
res.add(divisor)
(number / divisor) to divisor
} else {
number to (divisor + 1)
}
return primeFactorization(nextNumber, nextDivisor, res)
}