Найти все простые числа, не превосходящие 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();
}
}