ice00Среди магических квадратов из последовательных простых чисел первый квадрат, который начинается с числа 3, имеет порядок 35.
Массив для этого квадрата такой: 3, 5, ..., 9931, 9941.
Квадраты каких порядков тоже составляются из подобного массива, начинающегося с числа 3? Я посмотрела приведённые вами таблицы с квадратами до порядка 50, в этих таблицах нет подобных квадратов. А для порядков больше 50 есть ещё такие квадраты?
maxalу вас есть огромный массив простых чисел до
. Тогда, наверное, вы можете сенерировать такой же большой массив и из смитов? Меня очень интересуют наименьшие магические квадраты порядков 3 и 4 из последовательных смитов. tolstopuz сообщил, что проверил смиты до миллиарда и не нашёл такого квадрата порядка 3 (не поняла, только порядка 3 или и порядка 4 тоже). Я проверила по своей программе 220 первых кандидатов для порядка 4. Квадрат не найден. Программы для порядков 3 и 4 у меня есть, они работают очень быстро даже на Бейсике. Но у меня нет большого массива смитов. Кроме того, Бейсик не работает с большими числами. Может быть, вы попробуете решить эту задачу? Для данных порядков программы дают однозначный ответ: существует или не существует квадрат из данного массива чисел. Если он существует, то обязательно будет построен. Так как в этих программах выполняется полный перебор всех вариантов.
Напомню, что первый наименьший квадрат из последовательных смитов имеет порядок 10 (но нет уверенности, что это действительно наименьший, потому что первый кандидат по моей программе не дал магического квадрата; это однако не означает, что он не существует). Квадрат 11-го порядка мне не удалось построить. А начиная с порядка 12 всё пошло прекрасно, по программам ice00 такие квадраты строятся очень быстро.
-- Ср окт 14, 2009 08:52:12 --Вот код программы для построения нетрадиционного магического квадрата порядка 4 (впрочем, по этой программе можно строить и традиционные магические квадраты, если в качестве исходного массива ввести первые 16 чисел натурального ряда):
Код:
10 DIM P(16), Z(16), A(4, 4)
15 OPEN "MK1.txt" FOR INPUT AS #1
17 FOR I = 1 TO 16
18 INPUT #1, P(I)
19 NEXT I
20 CLOSE #1
21 S1 = 0
22 FOR I = 1 TO 16: S1 = S1 + P(I): NEXT I
23 S1 = S1 / 4
32 OPEN "MK2.txt" FOR OUTPUT AS #1
33 FOR I = 1 TO 16
34 FOR J = 1 TO 16
35 PRINT "J"; J
36 IF J = I THEN 530
38 FOR K = 1 TO 16
40 IF K <> I THEN IF K <> J THEN 56
42 GOTO 525
56 FOR L = 1 TO 16
58 IF L <> I THEN IF L <> J THEN IF L <> K THEN 62
60 GOTO 520
62 S = P(I) + P(J) + P(K) + P(L): Z(1) = P(I): Z(2) = P(J): Z(3) = P(K): Z(4) = P(L)
63 IF S <> S1 THEN 520
64 FOR M = 1 TO 16
66 IF M <> I THEN IF M <> J THEN IF M <> K THEN IF M <> L THEN 70
68 GOTO 515
70 B = S - P(J) - P(M) - P(K): Z(5) = P(M)
72 IF B < 1 THEN 515
73 FOR T = 1 TO 5
74 IF B = Z(T) THEN 515
75 NEXT T
78 FOR T = 1 TO 16
80 IF B = P(T) THEN 85
82 NEXT T
84 GOTO 515
85 Z(6) = B
86 FOR N = 1 TO 16
88 IF N <> I THEN IF N <> J THEN IF N <> K THEN IF N <> L THEN IF N <> M THEN IF P(N) <> B THEN 92
90 GOTO 510
92 C = S - B - P(N) - P(M): Z(7) = P(N)
94 IF C < 1 THEN 510
95 FOR T = 1 TO 7
96 IF C = Z(T) THEN 510
98 NEXT T
100 FOR T = 1 TO 16
102 IF C = P(T) THEN 109
104 NEXT T
106 GOTO 510
109 Z(8) = C
110 FOR Q = 1 TO 16
112 IF Q <> I THEN IF Q <> J THEN IF Q <> K THEN IF Q <> L THEN IF Q <> M THEN IF Q <> N THEN IF P(Q) <> B THEN IF P(Q) <> C THEN 116
114 GOTO 505
116 D = S - P(I) - P(Q) - C: Z(9) = P(Q)
118 IF D < 1 THEN 505
119 FOR T = 1 TO 9
120 IF D = Z(T) THEN 505
121 NEXT T
123 FOR T = 1 TO 16
124 IF D = P(T) THEN 127
125 NEXT T
126 GOTO 505
127 Z(10) = D
128 E = S - D - B - P(K)
129 IF E < 1 THEN 505
130 FOR T = 1 TO 10
131 IF E = Z(T) THEN 505
132 NEXT T
134 FOR T = 1 TO 16
135 IF E = P(T) THEN 139
136 NEXT T
138 GOTO 505
139 Z(11) = E
140 F = S - P(Q) - P(J) - P(M)
142 IF F < 1 THEN 505
144 FOR T = 1 TO 11
146 IF F = Z(T) THEN 505
148 NEXT T
152 FOR T = 1 TO 16
154 IF F = P(T) THEN 159
156 NEXT T
158 GOTO 505
159 Z(12) = F
160 FOR R = 1 TO 16
162 IF R <> I THEN IF R <> J THEN IF R <> K THEN IF R <> L THEN IF R <> M THEN IF R <> N THEN IF R <> Q THEN IF P(R) <> B THEN IF P(R) <> C THEN IF P(R) <> D THEN IF P(R) <> E THEN IF P(R) <> F THEN 165
164 GOTO 500
165 G = S - P(I) - P(N) - P(R): Z(13) = P(R)
166 IF G < 1 THEN 500
169 FOR T = 1 TO 13
170 IF G = Z(T) THEN 500
171 NEXT T
172 FOR T = 1 TO 16
173 IF G = P(T) THEN 177
174 NEXT T
176 GOTO 500
177 Z(14) = G
178 H = S - P(R) - P(J) - B
179 IF H < 1 THEN 500
180 FOR T = 1 TO 14
181 IF H = Z(T) THEN 500
182 NEXT T
185 FOR T = 1 TO 16
186 IF H = P(T) THEN 189
187 NEXT T
188 GOTO 500
189 Z(15) = H
190 O = S - C - H - P(L)
192 IF O < 1 THEN 500
194 IF G + P(M) + P(K) + O <> S THEN 500
196 FOR T = 1 TO 15
197 IF O = Z(T) THEN 500
200 NEXT T
208 FOR T = 1 TO 16
210 IF O = P(T) THEN 288
220 NEXT T
222 GOTO 500
288 A(1, 1) = P(I): A(1, 2) = P(R): A(1, 3) = G: A(1, 4) = P(N)
290 A(2, 1) = P(Q): A(2, 2) = P(J): A(2, 3) = P(M): A(2, 4) = F
292 A(3, 1) = D: A(3, 2) = B: A(3, 3) = P(K): A(3, 4) = E
294 A(4, 1) = C: A(4, 2) = H: A(4, 3) = O: A(4, 4) = P(L)
296 W = W + 1: PRINT W: PRINT #1, W
300 FOR X = 1 TO 4
302 FOR Y = 1 TO 4
304 PRINT A(X, Y);
306 NEXT Y
308 PRINT
310 NEXT X
316 PRINT
318 FOR X = 1 TO 4
320 FOR Y = 1 TO 4
322 PRINT #1, A(X, Y);
324 NEXT Y
326 PRINT #1,
328 NEXT X
330 PRINT #1,
500 NEXT R
505 NEXT Q
510 NEXT N
515 NEXT M
520 NEXT L
525 NEXT K
530 NEXT J
535 NEXT I
700 PRINT S1: PRINT
705 CLOSE #1
710 END
В файл MK1.txt помещается исходный массив чисел, в файл MK2.txt выводятся построенные магические квадраты.
Возможно, что программу можно ещё оптимизировать, но, как я уже сказала, она и так работает быстро.
Конечно, для проверки кандидатов из смитов надо бы присоединить к этой программе программу определения кандидатов, то есть подходящих массивов смитов, чтобы подходящий массив определялся и сразу же проверялся.
Задача хороша для всех! Построить наименьшие магические квадраты 3-го и 4-го порядков из последовательных смитов.
Если надо, я приведу и программу для проверки квадратов 3-го порядка.