Есть ли более эффективный способ генерировать палиндромы, которые просты, если границы велики?

Я решил эту проблему на тренинге USACO по генерации простых палиндромов между лимитами. Я процитировал расшифровку стенограммы в конце. Я решил это, сгенерировав все нечетные палиндромы ниже верхнего предела и проверив каждый из них на простое напечатанное число. Решение было передано грейдеру, но есть даже более эффективный метод, чем мой noob, генерирующий все и проверяющий вещь (потому что я действительно хочу изучить более эффективные стратегии в конкурентном программировании).

Число 151 является простым палиндромом, потому что это и простое число, и палиндром (это одно и то же число при чтении вперед и назад). Напишите программу, которая находит все простые палиндромы в диапазоне двух указанных чисел a и b (5 <= а < б <= 100 000 000); оба a и b считаются находящимися в пределах диапазона.

НАИМЕНОВАНИЕ ПРОГРАММЫ: pprime

ФОРМАТ ВВОДА

Строка 1: два целых числа, a и b
ОБРАЗЕЦ ВХОДА (файл pprime.in)

5 500

ВЫХОДНОЙ ФОРМАТ

Список палиндромных простых чисел в числовом порядке, по одному на строку.
ВЫБОР ВЫБОРА (файл pprime.out)

5
7
11
101
131
151
181
191
313
353
373
383

Я думаю, что я должен также предоставить свой алгоритм для получения вывода

Step 1. Take Input a and b
Step 2. Initialise a list of odd palindromes op
Step 3. Add 5, 7 and 11 to op
Step 4. Generate all the 3,5,7 digit odd palindromes and add to op
Step 5. Check for every element e of op
Step 5.1. If e>=a and e<=b
Step 5.1.1. If e is PRIME print e
Terminate the loop otherwise

Если бы верхняя граница была больше, этот процесс, очевидно, потерпел бы неудачу, поэтому я ищу более эффективное решение.

РЕДАКТИРОВАТЬ: я проверяю для простых чисел обычным способом, как в

Given the number I've to check for prime is n.
if (n==1) return false;
if (n==2) return true;
for (int i = 2; i <= sqrt(n); ++i)
if (n%i == 0) return false;
return true;

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]