import kotlin.math.sqrt
fun isPrime(n: Int): Boolean {
if (n == 2) return true
if (n < 2 || n % 2 == 0) return false
val limit = sqrt(n.toDouble()).toInt()
for (i in 3..limit step 2) {
if (n % i == 0) return false
}
return true
}
fun cyclicallyRotateLeft(n: Int): Int {
var m = n
var p = 1
while (m >= 10) {
p *= 10
m /= 10
}
return (n % p) * 10 + m
}
fun 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)
}
return true
}
fun main() {
val testNumbers = listOf(197, 1193, 23, 101, 119)
for (n in testNumbers) {
val result = if (isCircularPrime(n)) "Circular Prime" else "Not Circular Prime"
println("$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
*/