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

1 Answer

0 votes
using System;

class Program
{
    private static bool is_prime(int n) {
		if (n == 2) {
			return true;
		}
		if (n < 2 || n % 2 == 0) {
			return false;
		}
		for (int i = 3; i * i <= n; i += 2) {
			if (n % i == 0) {
				return false;
			}
		}

		return true;
	}

	private static int cyclically_rotate_left(int n) {
		int m = n;
		int p = 1;

		while (m >= 10) {
			p *= 10;
			m /= 10;
		}

		return (int)(m + 10 * (n % p));
	}

	private static bool is_circular_prime(int n) {
		if (!is_prime(n)) {
			return false;
		}

		int rotated_n = cyclically_rotate_left(n);

		while (rotated_n != n) {
			if (rotated_n < n || !is_prime(rotated_n)) {
				return false;
			}
			rotated_n = cyclically_rotate_left(rotated_n);
		}

		return true;
	}
	
    static void Main() {
        // 3779 = prime
		// 7793 = prime
		// 7937 = prime
		// 9377 = prime

		Console.Write(is_circular_prime(3779));
    }
}






/*
run:
  
true
  
*/

 



answered Mar 24, 2023 by avibootz
...