package main
import (
"fmt"
"math"
)
func isPrime(n int) bool {
if n == 2 {
return true
}
if n < 2 || n%2 == 0 {
return false
}
limit := int(math.Sqrt(float64(n)))
for i := 3; i <= limit; i += 2 {
if n%i == 0 {
return false
}
}
return true
}
func cyclicallyRotateLeft(n int) int {
m := n
p := 1
for m >= 10 {
p *= 10
m /= 10
}
return (n % p) * 10 + m
}
func isCircularPrime(n int) bool {
if n < 2 {
return false
}
rotated := cyclicallyRotateLeft(n)
for rotated != n {
if rotated < n || !isPrime(rotated) {
return false
}
rotated = cyclicallyRotateLeft(rotated)
}
return true
}
func main() {
testNumbers := []int{197, 1193, 23, 101, 119}
for _, n := range testNumbers {
if isCircularPrime(n) {
fmt.Printf("%d → Circular Prime\n", n)
} else {
fmt.Printf("%d → Not Circular Prime\n", n)
}
}
}
// 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
*/