В книге также приведена алгебраическая формула любого магического квадрата 3-го порядка. Девять чисел могут составить магический квадрат 3-го порядка тогда и только тогда, когда они являются членами следующей последовательности:
Код:
a-c, a-b+c, a+b, a+b+c, a, a-b-c, a-b, a+b-c, a+c
Если под последовательностями подразмевать возрастающие последовательности, то тут их может быть две (в предположении, что

- центральный элемент и

):
Код:
a-b-c, a-c, a-c+b, a-b, a, a+b, a+c-b, a+c, a+b+c
a-b-c, a-c, a-b, a-c+b, a, a+c-b, a+b, a+c, a+b+c
Какая из них реально имеет место, зависит от соотношения величин

и

(или же

и

).
-- Wed Oct 28, 2009 16:00:33 --Действительно, это минимальный квадрат. Проверил детерминированным алгоритмом все простые в пределах двух миллиардов. Получил

(с точностью до массива) квадрата.
Всё так. Дальнейшие квадраты (а точнее их центральные элементы) приведены в
A166113-- Wed Oct 28, 2009 16:14:34 --Для проверки всех натуральных в

понадобятся десятки дней. Посмотрел на загрузку системы. ЦП используется практически на максимум. А вот памяти выделяется примерно 2,5 Mb. Можно ли как-то убыстрить выполнение, отдав "почти все ресурсы на эту задачу"?
Тут все от быстродействия зависит. Комп по сути занимается факторизацией чисел снова и снова, и память ему для этого особо не нужна. В зависимости от быстродействия до

можно добраться за несколько дней. Например, в поиске квадратов

из последовательных смитов я уже к

подбираюсь.
Если хотите ускорить генерацию смитов, то нужно использовать что-то типа решета Эратосфена, где при прогоне каждого простого

и его степени к соответствующим элементам массива нужно прибавлять сумму цифр

. Тогда сумма цифр простых делителей будет накапливаться в элементах массива без всякой факторизации. Но реализация этого алгоритма для достижения предела

будет уже не три строчки и сильно зависеть от объёма доступной памяти.
-- Wed Oct 28, 2009 16:27:26 --Команду print() тоже пробовал (пробил в help), но это не помогло. В комстроке все отображается как надо, а вот в файле - нет: числа идут без разделения вообще.
По поводу \e. Когда нужно вводить? Перед выполнением 3-ей строки?
Проблема с print вероятно связана с разными способами перевода строки в юниксах и винде. Попробуйте печатать так:
print(n,Strchr(13)); или
print1(n,Strchr(13),Strchr(10));Насчет \e - поэксперементируйте.