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
*/