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.