How to check if a number is circular prime (cyclically rotate left will also be prime) in Scala

1 Answer

0 votes
object CircularPrimes extends App {

  def isPrime(n: Int): Boolean = {
    if (n == 2) return true
    if (n < 2 || n % 2 == 0) return false

    val limit = math.sqrt(n).toInt
    (3 to limit by 2).forall(n % _ != 0)
  }

  def cyclicallyRotateLeft(n: Int): Int = {
    var m = n
    var p = 1
    
    while (m >= 10) {
      p *= 10
      m /= 10
    }
    
    (n % p) * 10 + m
  }

  def isCircularPrime(n: Int): Boolean = {
    if (n < 2) return false

    var rotated = cyclicallyRotateLeft(n)
    while (rotated != n) {
      if (rotated < n || !isPrime(rotated)) return false
      rotated = cyclicallyRotateLeft(rotated)
    }

    true
  }

  val testNumbers = Seq(197, 1193, 23, 101, 119)

  for (n <- testNumbers) {
    val result = if (isCircularPrime(n)) "Circular Prime" else "Not Circular Prime"
    println(s"$n → $result")
  }
}


// 1193
// 1193 = prime
// 3119 = prime
// 9311 = prime
// 1931 = prime


/*
run:

197 → Circular Prime
1193 → Circular Prime
23 → Not Circular Prime
101 → Not Circular Prime
119 → Circular Prime

*/

 



answered 2 days ago by avibootz
edited 2 days ago by avibootz
...