Из того, что вы пишете, я предполагаю, что у вас уже есть список из пятизначных простых чисел.
Отфильтруйте список так, чтобы он содержал только простые числа с правильной суммой цифр.
Вам понадобится функция valid для проверки правильности квадрата, учитывая от 1 до 5 чисел, которые идут в столбцах. (Понятно, что номера столбцов определяют другие строки и диагонали. Итак, если 3-я цифра 1-го столбца - 7, но нет простого числа, начинающегося с 7, мы знаем, что мы не можем использовать это простое число в первый столбец. Не смотря на все остальные числа, вы рано обрежете дерево поиска.)
Вам нужна другая функция, чтобы получить наборы всех действительных простых чисел, которые имеют определенную цифру в позиции n (1..5). Возможно, вы хотите предварительно рассчитать это и сохранить в каком-то дереве или массиве.
Основная работа выполнена в действительном, который должен проверить, существуют ли простые числа для строк и диагоналей с цифрами в позициях, определенных до сих пор простыми числами в столбцах.
Тогда список решений:
[ (c1, c2, c3, c4, c5) | c1 <- primes, valid [c1],
c2 <- primes, valid [c1,c2],
c3 <- primes, valid [c1,c2,c3],
c4 <- primes, valid [c1,c2,c3,c4],
c5 <- primes, valid [c1,c2,c3,c4,c5] ]
или, обязательно поставьте:
for each c1 in primes
if valid(c1) then foreach c2 in primes
if valid(c1,c2) then foreach c3 in primes
if valid(c1,c2,c3) then foreach c4 in primes
if valid(c1,c2,c3,c4) then foreach c5 in primes
if valid(c1,c2,c3,c4,c5) then print solution
Добавление: поскольку нам нужно только искать числа, начинающиеся с последовательности определенных цифр, решение можно сделать более эффективным.
Рассмотрим случай, когда даны c1, c2 и c3, и valid () собирается проверить строку 3. Требуется 3-я цифра c1, c2 и c3, и мы можем интерпретировать их как первые 3 цифры числа, которое должно появиться в строке 3. Нам нужно только заполнить его нулями и затем проверить, знаем ли мы простое число, которое больше этого числа, но разница должна быть меньше 100 (чтобы сохранялись первые цифры). Но если у нас есть отсортированный массив простых чисел, это требует не более, чем двоичный поиск в этом массиве.