Поиск бинарно-симметрических простых чисел

Найти все простые числа, не превосходящие N, двоичная запись которых представляет собой симметричную последовательность нулей и единиц.

Входные данные

Целое положительное число.

Выходные данные

Список простых чисел.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    //возвращает список простых чисел
    static List<uint> SieveEratosthenes(uint n)
    {
        var numbers = new List<uint>();
        for (var i = 2u; i < n; i++)
        {
            numbers.Add(i);
        }

        for (var i = 0; i < numbers.Count; i++)
        {
            for (var j = 2u; j < n; j++)
            {
                numbers.Remove(numbers[i] * j);
            }
        }

        return numbers;
    }

    //перевод в двоичное представление
    static List<uint> UInt32ToBinary(uint n)
    {
        var res = new List<uint>();
        while (n > 0)
        {
            var d = n % 2;
            n /= 2;
            res.Add(d);
        }
        res.Reverse();
        return res;
    }

    //проверка бинарной симметрии
    static bool IsBinarySymmetric(uint number)
    {
        var bins = UInt32ToBinary(number);
        var start = 0;
        var end = bins.Count() - 1;
        while (start < end)
        {
            if (bins[start] != bins[end])
            {
                return false;
            }
            start++;
            end--;
        }

        return true;
    }

    static void Main(string[] args)
    {
        Console.Write("Введите N: ");
        var n = uint.Parse(Console.ReadLine());
        var primeNumbers = SieveEratosthenes(n);
        foreach (var prime in primeNumbers)
        {
            if (IsBinarySymmetric(prime))
            {
                Console.WriteLine("{0} = {1}", prime, string.Join(string.Empty, UInt32ToBinary(prime)));
            }
        }

        Console.ReadLine();
    }
}

Смотрите также: