В книге также приведена алгебраическая формула любого магического квадрата 3-го порядка. Девять чисел могут составить магический квадрат 3-го порядка тогда и только тогда, когда они являются членами следующей последовательности:
Код:
a-c, a-b+c, a+b, a+b+c, a, a-b-c, a-b, a+b-c, a+c
Если под последовательностями подразмевать возрастающие последовательности, то тут их может быть две (в предположении, что
![$a$ $a$](https://dxdy-01.korotkov.co.uk/f/4/4/b/44bc9d542a92714cac84e01cbbb7fd6182.png)
- центральный элемент и
![$0<b<c$ $0<b<c$](https://dxdy-02.korotkov.co.uk/f/9/6/6/966732de491eb6447b54f8578e400a6e82.png)
):
Код:
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
Какая из них реально имеет место, зависит от соотношения величин
![$c-b$ $c-b$](https://dxdy-02.korotkov.co.uk/f/5/2/0/5209a90f94b4f28de1c9354a1e297eb482.png)
и
![$b$ $b$](https://dxdy-01.korotkov.co.uk/f/4/b/d/4bdc8d9bcfb35e1c9bfb51fc69687dfc82.png)
(или же
![$c$ $c$](https://dxdy-04.korotkov.co.uk/f/3/e/1/3e18a4a28fdee1744e5e3f79d13b9ff682.png)
и
![$2b$ $2b$](https://dxdy-04.korotkov.co.uk/f/b/9/6/b96b0a2173b13df8cb9007a9a984a9f982.png)
).
-- Wed Oct 28, 2009 16:00:33 --Действительно, это минимальный квадрат. Проверил детерминированным алгоритмом все простые в пределах двух миллиардов. Получил
![$2$ $2$](https://dxdy-04.korotkov.co.uk/f/7/6/c/76c5792347bb90ef71cfbace628572cf82.png)
(с точностью до массива) квадрата.
Всё так. Дальнейшие квадраты (а точнее их центральные элементы) приведены в
A166113-- Wed Oct 28, 2009 16:14:34 --Для проверки всех натуральных в
![$10 \cdot 10^9$ $10 \cdot 10^9$](https://dxdy-01.korotkov.co.uk/f/8/7/4/874dba04f5df9418f673cfe576dd39e682.png)
понадобятся десятки дней. Посмотрел на загрузку системы. ЦП используется практически на максимум. А вот памяти выделяется примерно 2,5 Mb. Можно ли как-то убыстрить выполнение, отдав "почти все ресурсы на эту задачу"?
Тут все от быстродействия зависит. Комп по сути занимается факторизацией чисел снова и снова, и память ему для этого особо не нужна. В зависимости от быстродействия до
![$10^{10}$ $10^{10}$](https://dxdy-01.korotkov.co.uk/f/c/8/d/c8d250c8a04e052dbecc78e03549378082.png)
можно добраться за несколько дней. Например, в поиске квадратов
![$3\times 3$ $3\times 3$](https://dxdy-01.korotkov.co.uk/f/4/6/e/46e42d6ebfb1f8b50fe3a47153d01cd282.png)
из последовательных смитов я уже к
![$3\cdot 10^{10}$ $3\cdot 10^{10}$](https://dxdy-02.korotkov.co.uk/f/9/9/9/9999cec7c66be90a8dec17591aae962882.png)
подбираюсь.
Если хотите ускорить генерацию смитов, то нужно использовать что-то типа решета Эратосфена, где при прогоне каждого простого
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
и его степени к соответствующим элементам массива нужно прибавлять сумму цифр
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
. Тогда сумма цифр простых делителей будет накапливаться в элементах массива без всякой факторизации. Но реализация этого алгоритма для достижения предела
![$10^{10}$ $10^{10}$](https://dxdy-01.korotkov.co.uk/f/c/8/d/c8d250c8a04e052dbecc78e03549378082.png)
будет уже не три строчки и сильно зависеть от объёма доступной памяти.
-- Wed Oct 28, 2009 16:27:26 --Команду print() тоже пробовал (пробил в help), но это не помогло. В комстроке все отображается как надо, а вот в файле - нет: числа идут без разделения вообще.
По поводу \e. Когда нужно вводить? Перед выполнением 3-ей строки?
Проблема с print вероятно связана с разными способами перевода строки в юниксах и винде. Попробуйте печатать так:
print(n,Strchr(13)); или
print1(n,Strchr(13),Strchr(10));Насчет \e - поэксперементируйте.