How to find the first 18 circular prime numbers (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

		int n = 2;
 
        for (int i = 0; i < 18; n++) {
            if (is_circular_prime(n)) {
                if (i > 0) {
                    Console.Write(", ");
                }
                Console.Write(n);
                i++;
            }
        }
    }
}






/*
run:
  
2, 3, 5, 7, 11, 13, 17, 37, 79, 113, 197, 199, 337, 1193, 3779, 11939, 19937, 193939
  
*/

 



answered Mar 24, 2023 by avibootz
...