Write a Kotlin program to find GCD of a given number n using prime factors.
For example,
Given n = 45
Output
3 3 5
Given n = 30
2 3 5
Common Prime Factors : 3, 5
GCD = 3 * 5 = 15
1. Program to find GCD of Number (Using Prime Factors)
import java.util.*
import kotlin.math.sqrt
fun main() {
val scanner = Scanner(System.`in`)
println("Enter a:")
val a = scanner.nextInt()
println("Enter b:")
val b = scanner.nextInt()
val aFactors = primeFactors(a)
val bFactors = primeFactors(b)
var gcd = if (aFactors.size > 0 && bFactors.size > 0) 1 else 0
// Compare factors of a and b. Find the common factors
// and multiply it with gcd to compute final hcf.
for (mapEntry in aFactors) {
val aCount = mapEntry.value
val bCount = bFactors[mapEntry.key]
if (bCount != null) {
// Find how many times each factor (i.e. key) is common in a and b map.
val commonCount = if (bCount > aCount) aCount else bCount
// Multiply key up-to commonCount times with gcd.
for (index in 1..commonCount) gcd *= mapEntry.key
}
}
println("GCD of $a and $b: $gcd")
}
private fun primeFactors(number: Int): HashMap<Int, Int> {
// Hash map that contains all the prime factors of given number.
val map: HashMap<Int, Int> = HashMap<Int, Int>()
var n = number
if (n <= 0) {
return map
}
// At first check for divisibility by 2.
// Add it in arr till it is divisible
var count = 1
while ((n % 2) == 0) {
map[2] = count
count++
n /= 2
}
val squareRoot = sqrt(n.toDouble()).toInt()
// Run loop from 3 to square root of n.
// Check for divisibility by i.
// Add i in map till it is divisible by i.
for (i in 3..squareRoot step 2) {
count = 1
while (n % i == 0) {
map[i] = count
count++
n /= i
}
}
// If n is a prime number greater than 2.
if (n > 2) {
count = 1
map[n] = count
}
return map
}
When you run the program, output will be –
Enter a: 30 Enter b: 45 GCD of 30 and 45: 15
Explanation:
primFactors returns a hashMap that contains all prime factors of given number.
For example,
Let’s assume we have entered a = 30, and b = 45.
For number n = 30,
Returned hashMap will be –
{
2: 1,
3: 1,
5: 1
}
This map will be stored in aFactors.
For number n = 45,
Returned hashMap will be –
{
3: 1,
3: 1,
5: 1
}
This map will be stored in bFactors.
Now, we run a for loop on aFactors to find common factors between a and b.
We multiply each time we find a common factor with gcd to calculate final gcd.
Thus, we went through Kotlin program to find GCD of a given number n using prime factors.