import Foundation
func isPrime(_ n: Int) -> Bool {
if n == 2 { return true }
if n < 2 || n % 2 == 0 { return false }
let limit = Int(sqrt(Double(n)))
for i in stride(from: 3, through: limit, by: 2) {
if n % i == 0 { return false }
}
return true
}
func cyclicallyRotateLeft(_ n: Int) -> Int {
var m = n
var p = 1
while m >= 10 {
p *= 10
m /= 10
}
return (n % p) * 10 + m
}
func isCircularPrime(_ n: Int) -> Bool {
if n < 2 { return false }
var rotated = cyclicallyRotateLeft(n)
while rotated != n {
if rotated < n || !isPrime(rotated) {
return false
}
rotated = cyclicallyRotateLeft(rotated)
}
return true
}
let testNumbers = [197, 1193, 23, 101, 119]
for n in testNumbers {
let result = isCircularPrime(n) ? "Circular Prime" : "Not Circular Prime"
print("\(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
*/