Попробовала и первого кандидата в магический квадрат 12-го порядка из последовательных смитов. Массив: 382, ..., 4189. Магическая константа 26062. Полумагический квадрат построился за 5 минут, причём такой, что магической суммы нет только в одной диагонали. Вот этот квадрат:
Код:
4162 2079 1282 1903 645 2583 1962 1219 2745 3595 922 2965
2679 2964 535 1449 729 3046 3663 1966 1626 2958 2409 2038
2155 3973 3294 3366 1822 1842 2461 2556 1952 483 1776 382
778 627 3345 3564 4126 1086 2944 1255 1111 1642 2970 2614
2475 1376 3802 454 1881 852 562 1872 2218 3690 2934 3946
2265 3864 958 1921 3649 1678 2902 2366 1736 2785 1284 654
1633 517 636 1908 3852 3246 588 3174 576 3694 2373 3865
2182 2286 2362 2576 1165 895 1755 634 3226 2722 3168 3091
2067 4054 3442 3138 861 2173 1858 4189 526 762 2326 666
1507 2888 1795 2974 2484 2434 3615 690 3930 825 985 1935
1581 728 4173 1894 4185 2605 913 2751 3505 391 2688 648
2578 706 438 915 663 3622 2839 3390 2911 2515 2227 3258
Что тут можно сказать? Существует ли магический квадрат из такого массива смитов? Аналогичные результаты у меня уже для порядков 8, 10, 12 получены. Просто очень хочется узнать конечный результат. Может ли кто-нибудь сделать из дистрибутива, предоставленного ice00, исполняемую программу хотя бы для одного из перечисленных порядков? Или это умеет только ice00? То есть в Италии это умеют, а в России нет
Огорчительно!
Вот, например, исходный код программы для построения магического квадрата 8-го порядка. Я уже вставила в этот код нужный массив смитов и нужную магическую константу.
Код:
/**
* @(#)pms8_79.h 2000/03/15
*
* @author Tognon Stefano
* @version 1.00
*
* This program automatically generates random prime magic squares of order 8
* for sequence of primes from primes 79.
* The square is printed in standard output, while the other information are
* printed in standard error.
*
* note: some comments are in the style of Javadoc of Java language!
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA.
*/
typedef unsigned int word;
#define DORDER 8
const int ORDER=DORDER; // square order
const int COMB=256; // 2 at pow of order
const word MAGIC=6496; // magic constant
// number of max spaces between output values
const int MAX_BLANK=4;
// list of sequential primes numbers
const word PRIME[ORDER*ORDER]={
58,
85, 94, 121, 166, 202, 265, 274, 319, 346, 355, 378,
382, 391, 438, 454, 483, 517, 526, 535, 562, 576, 588,
627, 634, 636, 645, 648, 654, 663, 666, 690, 706, 728,
729, 762, 778, 825, 852, 861, 895, 913, 915, 922, 958,
985, 1086, 1111, 1165, 1219, 1255, 1282, 1284, 1376, 1449, 1507,
1581, 1626, 1633, 1642, 1678, 1736, 1755, 1776};
// this is a union of bits and the corresponding int value.
// if the program never produce results, probably your compiler manage this
// union in a different way. If we increase 'counter' then some bits may
// changes their value.
union unionBits {
int counter;
struct {
unsigned bit0 :1;
unsigned bit1 :1;
unsigned bit2 :1;
unsigned bit3 :1;
unsigned bit4 :1;
unsigned bit5 :1;
unsigned bit6 :1;
unsigned bit7 :1;
} bit;
};
// note: these defines works ok with even order
#define UP_SEQ {0, 1, 2, 3, 4, 5, 6, 7}
#define DN_SEQ {7, 6, 5, 4, 3, 2, 1, 0}
#define IJ(a) (i==a || j==(ORDER-a-1) || j==a || i==(ORDER-a-1))
#define POS(a) (pos[a]!=a)
#define POSES POS(0) && POS(1) && POS(2) && POS(3) && \
POS(4) && POS(5) && POS(6) && POS(7)
#define VALUE(a) (sq.cell[pos[a]][a])
#define VALUES (VALUE(0)+ VALUE(1)+ VALUE(2)+ VALUE(3)+ VALUE(4)+ \
VALUE(5)+ VALUE(6)+ VALUE(7))
#define IF_SWAP if (bits.bit.bit0) swap(sq, i, 0, j, 0); \
if (bits.bit.bit1) swap(sq, i, 1, j, 1); \
if (bits.bit.bit2) swap(sq, i, 2, j, 2); \
if (bits.bit.bit3) swap(sq, i, 3, j, 3); \
if (bits.bit.bit4) swap(sq, i, 4, j, 4); \
if (bits.bit.bit5) swap(sq, i, 5, j, 5); \
if (bits.bit.bit6) swap(sq, i, 6, j, 6); \
if (bits.bit.bit7) swap(sq, i, 7, j, 7);
#define SUM_CELL sq.cell[index[bits.bit.bit0]][0]+ \
sq.cell[index[bits.bit.bit1]][1]+ \
sq.cell[index[bits.bit.bit2]][2]+ \
sq.cell[index[bits.bit.bit3]][3]+ \
sq.cell[index[bits.bit.bit4]][4]+ \
sq.cell[index[bits.bit.bit5]][5]+ \
sq.cell[index[bits.bit.bit6]][6]+ \
sq.cell[index[bits.bit.bit7]][7]
#define BIT_IJ (bits.bit.bit0 && IJ(0)) || \
(bits.bit.bit1 && IJ(1)) || \
(bits.bit.bit2 && IJ(2)) || \
(bits.bit.bit3 && IJ(3)) || \
(bits.bit.bit4 && IJ(4)) || \
(bits.bit.bit5 && IJ(5)) || \
(bits.bit.bit6 && IJ(6)) || \
(bits.bit.bit7 && IJ(7))
#define cerr_h \
"Usage: pms8_79 [-m.] [-n,] [-t;]" << endl \
<< "Options:" << endl \
<< " -m<mh> where mh is the method to use (default d3):" << endl \
<< " a1: 8R 8C 2D 8R v1\tdon't give speed result" << endl \
<< " a2: 8R 8C 2D 8R v2\tdon't give speed result" << endl \
<< " a3: 8R 8C 2D 8R v3\tdon't give speed result" << endl \
<< " b1: 2R 2D 8R 8C v1\tdon't give speed result" << endl \
<< " b2: 2R 2D 8R 8C v2\tdon't give speed result" << endl \
<< " b3: 2R 2D 8R 8C v3\tdon't give speed result" << endl \
<< " c1: 8R 8C 1D v1\t 80 sq/min in PII 266Mhz " \
<< "(average of 30 squares)" << endl \
<< " c2: 8R 8C 1D v2\t 37 sq/min in PII 266Mhz " \
<< "(average of 100 squares)" << endl \
<< " c3: 8R 8C 1D v2\t106 sq/min in PII 266Mhz " \
<< "(average of 100 squares)" << endl \
<< " d1: 8R 8C 1D 1D 8R v1\t 16 sq/min in PII 266Mhz " \
<< "(average of 20 squares)" << endl \
<< " d2: 8R 8C 1D 1D 8R v2\tdon't give speed result" << endl \
<< " d3: 8R 8C 1D 1D 8R v3\t 9 sq/min in PII 266Mhz " \
<< "(average of 20 squares)" << endl \
<< " d4: 8R 8C 1D 1D 8R v3\t 11 sq/min in PII 266Mhz " \
<< "(average of 20 squares)" << endl \
<< " (R=row C=column D=diagonal, v version)" << endl \
<< " -n<nu> where nu is the number of squares to generate " \
<< "(default 1)" << endl \
<< " -t<nn> where nn is the number of cycle for the methods that " \
<< "allow time out (only c3)" << endl \
<< " -h the help" << endl;
#define cerr_default "Invalid option: use pms8_79 -h for help" << endl;
Кто может выполнить компиляцию и получить исполняемую программу?
Далее, по-хорошему в этой программе надо сделать так, чтобы массив смитов вводился из внешнего файла, а магическая константа вычислялась в программе, ибо она полностью определяется порядком квадрата и массивом чисел, из которых этот квадрат будет составляться. Тогда эту программу можно будет выполнить не только для данного массива смитов, но и для других вариантов массива, то есть проверить других кандидатов в магический квадрат 8-го порядка из последовательных смитов.
И всё точно так же для других порядков.