saurav_kalsoor

Sort By Primes - KOTLIN

Jan 25th, 2022 (edited)
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Author : Saurav Kalsoor
  2. // Sort By Primes - KOTLIN
  3.  
  4. import java.util.*
  5.  
  6. var sc: Scanner = Scanner(System.`in`)
  7.  
  8. fun main() {
  9.     val n: Int = sc.nextInt()
  10.     val arr: ArrayList<Int> = ArrayList<Int>()
  11.     for (i in 0 until n) {
  12.         val input: Int = sc.nextInt()
  13.         arr.add(input)
  14.     }
  15.     val result: ArrayList<Int> = sortPrimeNonPrime(arr, n)
  16.     for (i in 0 until n) print(result.get(i).toString() + " ")
  17.     println()
  18. }
  19.  
  20. fun sortPrimeNonPrime(arr: ArrayList<Int>, n: Int): ArrayList<Int> {
  21.     val maxLimit = 10001
  22.     val primesSet: HashSet<Int> = HashSet<Int>()
  23.     val isPrime = BooleanArray(maxLimit)
  24.    
  25.     for (i in 2 until maxLimit) isPrime[i] = true
  26.    
  27.     for (i in 2 until maxLimit) {
  28.         if (isPrime[i]) {
  29.             primesSet.add(i)
  30.             var j: Int = i * i
  31.             while (j < maxLimit) {
  32.                 isPrime[j] = false
  33.                 j += i
  34.             }
  35.         }
  36.     }
  37.     val primes: ArrayList<Int> = ArrayList<Int>()
  38.     val nonPrimes: ArrayList<Int> = ArrayList<Int>()
  39.     for (i in 0 until n) {
  40.         if (primesSet.contains(arr.get(i))) {
  41.             primes.add(arr.get(i))
  42.         } else {
  43.             nonPrimes.add(arr.get(i))
  44.         }
  45.     }
  46.    
  47.     Collections.sort(primes)
  48.     Collections.sort(nonPrimes, Collections.reverseOrder())
  49.    
  50.     val result: ArrayList<Int> = ArrayList<Int>()
  51.     var j = 0
  52.     var k = 0
  53.    
  54.     for (i in 0 until n) {
  55.         if (primesSet.contains(arr.get(i))) {
  56.             result.add(primes.get(j))
  57.             j++
  58.         } else {
  59.             result.add(nonPrimes.get(k))
  60.             k++
  61.         }
  62.     }
  63.     return result
  64. }
Add Comment
Please, Sign In to add comment