Ответ 1
Из того, что вы пишете, я предполагаю, что у вас есть список из 5 цифр простых чисел. Отфильтруйте список так, чтобы он содержал только простые числа с правильной суммой цифр.
Вам понадобится функция, действительная для проверки допустимого квадрата, заданного от 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
Приложение: поскольку нам нужно искать только числа, которые начинаются с seqeuence определенных цифр, решение может быть сделано более эффективным. Рассмотрим случай, когда c1, c2, annd c3 заданы и действительны() собирается проверить строку 3. Он принимает 3-ю цифру c1, c2 и c3, и мы можем интерпретировать их как ведущие 3 цифры числа, которое должно появиться в строке 3. Нам нужно только заполнить его нулями и затем проверить, известно ли нам простое число, большее этого числа, но разница должна быть меньше 100 (так что ведущие разряды сохраняются). Но если у нас есть отсортированный массив с простым номером, это требует не более, чем двоичного поиска в этом массиве.