]> AND Private Git Repository - 14Secrypt.git/blob - experiments/smm4.pl
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
ajout de cr
[14Secrypt.git] / experiments / smm4.pl
1 :-use_module(library(clpfd)).
2
3
4 % N is the dot product of lists V1 and V2.
5 dot(V1, V2, N) :- maplist(product,V1,V2,P), sumlist(P,N).
6 product(N1,N2,N3) :- N3 is N1*N2.
7
8 % Matrix multiplication with matrices represented
9 % as lists of lists. M3 is the product of M1 and M2
10 mmult(M1, M2, M3) :- transpose(M2,MT), maplist(mm_helper(MT), M1, M3).
11 mm_helper(M2, I1, M3) :- maplist(dot(I1), M2, M3).
12
13
14 suml([],[],[]).
15
16 suml(L1,L2,[E1 + E2|R2]):-
17     L1 = [E1|T1],
18     L2 = [E2|T2],
19     suml(T1,T2,R2).
20
21
22
23 summ([],[],[]).
24 summ(M1,M2,[Lr|R2]):-
25     M1 = [E1|T1],
26     M2 = [E2|T2],
27     suml(E1,E2,Lr),
28     summ(T1,T2,R2).
29
30
31 flatten(List, Flattened):-
32   flatten(List, [], Flattened).
33
34 flatten([], Flattened, Flattened).
35 flatten([Item|Tail], L, Flattened):-
36   flatten(Item, L1, Flattened),
37   flatten(Tail, L, L1).
38 flatten(Item, Flattened, [Item|Flattened]):-
39   \+ is_list(Item).
40
41 touspositifs(X):-
42     flatten(X,XF),
43     tp(XF).
44
45 tp([]).
46 tp(X):-
47     X = [E|L],
48     E #> 0,
49     tp(L).
50
51
52 sc4(X1):-
53          mmult(X1,X1,X2),
54          mmult(X1,X2,X3),
55          mmult(X1,X3,X4),
56          mmult(X1,X4,X5),
57          mmult(X1,X5,X6),
58          mmult(X1,X6,X7),
59          mmult(X1,X7,X8),
60          mmult(X1,X8,X9),
61          mmult(X1,X9,X10),
62          mmult(X1,X10,X11),
63          mmult(X1,X11,X12),
64          mmult(X1,X12,X13),
65          mmult(X1,X13,X14),
66          mmult(X1,X14,X15),
67          mmult(X1,X15,X16),
68          summ(X1,X2,S2),
69          summ(S2,X3,S3),
70          summ(S3,X4,S4),
71          summ(S4,X5,S5),
72          summ(S5,X6,S6),
73          summ(S6,X7,S7),
74          summ(S7,X8,S8),
75          summ(S8,X9,S9),
76          summ(S9,X10,S10),
77          summ(S10,X11,S11),
78          summ(S11,X12,S12),
79          summ(S12,X13,S13),
80          summ(S13,X14,S14),
81          summ(S14,X15,S15),
82          summ(S15,X16,S16),
83          touspositifs(S16).
84
85 bistoc(X):-
86          X=[[M0X0, M0X1, M0X2, M0X3, M0X4, M0X5, M0X6, M0X7, M0X8, M0X9, M0X10, M0X11, M0X12, M0X13, M0X14, M0X15], [M1X0, M1X1, M1X2, M1X3, M1X4, M1X5, M1X6, M1X7, M1X8, M1X9, M1X10, M1X11, M1X12, M1X13, M1X14, M1X15], [M2X0, M2X1, M2X2, M2X3, M2X4, M2X5, M2X6, M2X7, M2X8, M2X9, M2X10, M2X11, M2X12, M2X13, M2X14, M2X15], [M3X0, M3X1, M3X2, M3X3, M3X4, M3X5, M3X6, M3X7, M3X8, M3X9, M3X10, M3X11, M3X12, M3X13, M3X14, M3X15], [M4X0, M4X1, M4X2, M4X3, M4X4, M4X5, M4X6, M4X7, M4X8, M4X9, M4X10, M4X11, M4X12, M4X13, M4X14, M4X15], [M5X0, M5X1, M5X2, M5X3, M5X4, M5X5, M5X6, M5X7, M5X8, M5X9, M5X10, M5X11, M5X12, M5X13, M5X14, M5X15], [M6X0, M6X1, M6X2, M6X3, M6X4, M6X5, M6X6, M6X7, M6X8, M6X9, M6X10, M6X11, M6X12, M6X13, M6X14, M6X15], [M7X0, M7X1, M7X2, M7X3, M7X4, M7X5, M7X6, M7X7, M7X8, M7X9, M7X10, M7X11, M7X12, M7X13, M7X14, M7X15], [M8X0, M8X1, M8X2, M8X3, M8X4, M8X5, M8X6, M8X7, M8X8, M8X9, M8X10, M8X11, M8X12, M8X13, M8X14, M8X15], [M9X0, M9X1, M9X2, M9X3, M9X4, M9X5, M9X6, M9X7, M9X8, M9X9, M9X10, M9X11, M9X12, M9X13, M9X14, M9X15], [M10X0, M10X1, M10X2, M10X3, M10X4, M10X5, M10X6, M10X7, M10X8, M10X9, M10X10, M10X11, M10X12, M10X13, M10X14, M10X15], [M11X0, M11X1, M11X2, M11X3, M11X4, M11X5, M11X6, M11X7, M11X8, M11X9, M11X10, M11X11, M11X12, M11X13, M11X14, M11X15], [M12X0, M12X1, M12X2, M12X3, M12X4, M12X5, M12X6, M12X7, M12X8, M12X9, M12X10, M12X11, M12X12, M12X13, M12X14, M12X15], [M13X0, M13X1, M13X2, M13X3, M13X4, M13X5, M13X6, M13X7, M13X8, M13X9, M13X10, M13X11, M13X12, M13X13, M13X14, M13X15], [M14X0, M14X1, M14X2, M14X3, M14X4, M14X5, M14X6, M14X7, M14X8, M14X9, M14X10, M14X11, M14X12, M14X13, M14X14, M14X15], [M15X0, M15X1, M15X2, M15X3, M15X4, M15X5, M15X6, M15X7, M15X8, M15X9, M15X10, M15X11, M15X12, M15X13, M15X14, M15X15]],
87          M0X0 in 0..4,
88          M0X1 in 0..1,
89          M0X2 in 0..1,
90          M0X3 is 0 ,
91          M0X4 in 0..1,
92          M0X5 is 0 ,
93          M0X6 is 0 ,
94          M0X7 is 0 ,
95          M0X8 in 0..1,
96          M0X9 is 0 ,
97          M0X10 is 0 ,
98          M0X11 is 0 ,
99          M0X12 is 0 ,
100          M0X13 is 0 ,
101          M0X14 is 0 ,
102          M0X15 is 0 ,
103          M1X0 in 0..1,
104          M1X1 in 0..4,
105          M1X2 is 0 ,
106          M1X3 in 0..1,
107          M1X4 is 0 ,
108          M1X5 in 0..1,
109          M1X6 is 0 ,
110          M1X7 is 0 ,
111          M1X8 is 0 ,
112          M1X9 in 0..1,
113          M1X10 is 0 ,
114          M1X11 is 0 ,
115          M1X12 is 0 ,
116          M1X13 is 0 ,
117          M1X14 is 0 ,
118          M1X15 is 0 ,
119          M2X0 in 0..1,
120          M2X1 is 0 ,
121          M2X2 in 0..4,
122          M2X3 in 0..1,
123          M2X4 is 0 ,
124          M2X5 is 0 ,
125          M2X6 in 0..1,
126          M2X7 is 0 ,
127          M2X8 is 0 ,
128          M2X9 is 0 ,
129          M2X10 in 0..1,
130          M2X11 is 0 ,
131          M2X12 is 0 ,
132          M2X13 is 0 ,
133          M2X14 is 0 ,
134          M2X15 is 0 ,
135          M3X0 is 0 ,
136          M3X1 in 0..1,
137          M3X2 in 0..1,
138          M3X3 in 0..4,
139          M3X4 is 0 ,
140          M3X5 is 0 ,
141          M3X6 is 0 ,
142          M3X7 in 0..1,
143          M3X8 is 0 ,
144          M3X9 is 0 ,
145          M3X10 is 0 ,
146          M3X11 in 0..1,
147          M3X12 is 0 ,
148          M3X13 is 0 ,
149          M3X14 is 0 ,
150          M3X15 is 0 ,
151          M4X0 in 0..1,
152          M4X1 is 0 ,
153          M4X2 is 0 ,
154          M4X3 is 0 ,
155          M4X4 in 0..4,
156          M4X5 in 0..1,
157          M4X6 in 0..1,
158          M4X7 is 0 ,
159          M4X8 is 0 ,
160          M4X9 is 0 ,
161          M4X10 is 0 ,
162          M4X11 is 0 ,
163          M4X12 in 0..1,
164          M4X13 is 0 ,
165          M4X14 is 0 ,
166          M4X15 is 0 ,
167          M5X0 is 0 ,
168          M5X1 in 0..1,
169          M5X2 is 0 ,
170          M5X3 is 0 ,
171          M5X4 in 0..1,
172          M5X5 in 0..4,
173          M5X6 is 0 ,
174          M5X7 in 0..1,
175          M5X8 is 0 ,
176          M5X9 is 0 ,
177          M5X10 is 0 ,
178          M5X11 is 0 ,
179          M5X12 is 0 ,
180          M5X13 in 0..1,
181          M5X14 is 0 ,
182          M5X15 is 0 ,
183          M6X0 is 0 ,
184          M6X1 is 0 ,
185          M6X2 in 0..1,
186          M6X3 is 0 ,
187          M6X4 in 0..1,
188          M6X5 is 0 ,
189          M6X6 in 0..4,
190          M6X7 in 0..1,
191          M6X8 is 0 ,
192          M6X9 is 0 ,
193          M6X10 is 0 ,
194          M6X11 is 0 ,
195          M6X12 is 0 ,
196          M6X13 is 0 ,
197          M6X14 in 0..1,
198          M6X15 is 0 ,
199          M7X0 is 0 ,
200          M7X1 is 0 ,
201          M7X2 is 0 ,
202          M7X3 in 0..1,
203          M7X4 is 0 ,
204          M7X5 in 0..1,
205          M7X6 in 0..1,
206          M7X7 in 0..4,
207          M7X8 is 0 ,
208          M7X9 is 0 ,
209          M7X10 is 0 ,
210          M7X11 is 0 ,
211          M7X12 is 0 ,
212          M7X13 is 0 ,
213          M7X14 is 0 ,
214          M7X15 in 0..1,
215          M8X0 in 0..1,
216          M8X1 is 0 ,
217          M8X2 is 0 ,
218          M8X3 is 0 ,
219          M8X4 is 0 ,
220          M8X5 is 0 ,
221          M8X6 is 0 ,
222          M8X7 is 0 ,
223          M8X8 in 0..4,
224          M8X9 in 0..1,
225          M8X10 in 0..1,
226          M8X11 is 0 ,
227          M8X12 in 0..1,
228          M8X13 is 0 ,
229          M8X14 is 0 ,
230          M8X15 is 0 ,
231          M9X0 is 0 ,
232          M9X1 in 0..1,
233          M9X2 is 0 ,
234          M9X3 is 0 ,
235          M9X4 is 0 ,
236          M9X5 is 0 ,
237          M9X6 is 0 ,
238          M9X7 is 0 ,
239          M9X8 in 0..1,
240          M9X9 in 0..4,
241          M9X10 is 0 ,
242          M9X11 in 0..1,
243          M9X12 is 0 ,
244          M9X13 in 0..1,
245          M9X14 is 0 ,
246          M9X15 is 0 ,
247          M10X0 is 0 ,
248          M10X1 is 0 ,
249          M10X2 in 0..1,
250          M10X3 is 0 ,
251          M10X4 is 0 ,
252          M10X5 is 0 ,
253          M10X6 is 0 ,
254          M10X7 is 0 ,
255          M10X8 in 0..1,
256          M10X9 is 0 ,
257          M10X10 in 0..4,
258          M10X11 in 0..1,
259          M10X12 is 0 ,
260          M10X13 is 0 ,
261          M10X14 in 0..1,
262          M10X15 is 0 ,
263          M11X0 is 0 ,
264          M11X1 is 0 ,
265          M11X2 is 0 ,
266          M11X3 in 0..1,
267          M11X4 is 0 ,
268          M11X5 is 0 ,
269          M11X6 is 0 ,
270          M11X7 is 0 ,
271          M11X8 is 0 ,
272          M11X9 in 0..1,
273          M11X10 in 0..1,
274          M11X11 in 0..4,
275          M11X12 is 0 ,
276          M11X13 is 0 ,
277          M11X14 is 0 ,
278          M11X15 in 0..1,
279          M12X0 is 0 ,
280          M12X1 is 0 ,
281          M12X2 is 0 ,
282          M12X3 is 0 ,
283          M12X4 in 0..1,
284          M12X5 is 0 ,
285          M12X6 is 0 ,
286          M12X7 is 0 ,
287          M12X8 in 0..1,
288          M12X9 is 0 ,
289          M12X10 is 0 ,
290          M12X11 is 0 ,
291          M12X12 in 0..4,
292          M12X13 in 0..1,
293          M12X14 in 0..1,
294          M12X15 is 0 ,
295          M13X0 is 0 ,
296          M13X1 is 0 ,
297          M13X2 is 0 ,
298          M13X3 is 0 ,
299          M13X4 is 0 ,
300          M13X5 in 0..1,
301          M13X6 is 0 ,
302          M13X7 is 0 ,
303          M13X8 is 0 ,
304          M13X9 in 0..1,
305          M13X10 is 0 ,
306          M13X11 is 0 ,
307          M13X12 in 0..1,
308          M13X13 in 0..4,
309          M13X14 is 0 ,
310          M13X15 in 0..1,
311          M14X0 is 0 ,
312          M14X1 is 0 ,
313          M14X2 is 0 ,
314          M14X3 is 0 ,
315          M14X4 is 0 ,
316          M14X5 is 0 ,
317          M14X6 in 0..1,
318          M14X7 is 0 ,
319          M14X8 is 0 ,
320          M14X9 is 0 ,
321          M14X10 in 0..1,
322          M14X11 is 0 ,
323          M14X12 in 0..1,
324          M14X13 is 0 ,
325          M14X14 in 0..4,
326          M14X15 in 0..1,
327          M15X0 is 0 ,
328          M15X1 is 0 ,
329          M15X2 is 0 ,
330          M15X3 is 0 ,
331          M15X4 is 0 ,
332          M15X5 is 0 ,
333          M15X6 is 0 ,
334          M15X7 in 0..1,
335          M15X8 is 0 ,
336          M15X9 is 0 ,
337          M15X10 is 0 ,
338          M15X11 in 0..1,
339          M15X12 is 0 ,
340          M15X13 in 0..1,
341          M15X14 in 0..1,
342          M15X15 in 0..4,
343          M0X0+ M0X1+ M0X2+ M0X3+ M0X4+ M0X5+ M0X6+ M0X7+ M0X8+ M0X9+ M0X10+ M0X11+ M0X12+ M0X13+ M0X14+ M0X15 #=4 ,
344          M1X0+ M1X1+ M1X2+ M1X3+ M1X4+ M1X5+ M1X6+ M1X7+ M1X8+ M1X9+ M1X10+ M1X11+ M1X12+ M1X13+ M1X14+ M1X15 #=4 ,
345          M2X0+ M2X1+ M2X2+ M2X3+ M2X4+ M2X5+ M2X6+ M2X7+ M2X8+ M2X9+ M2X10+ M2X11+ M2X12+ M2X13+ M2X14+ M2X15 #=4 ,
346          M3X0+ M3X1+ M3X2+ M3X3+ M3X4+ M3X5+ M3X6+ M3X7+ M3X8+ M3X9+ M3X10+ M3X11+ M3X12+ M3X13+ M3X14+ M3X15 #=4 ,
347          M4X0+ M4X1+ M4X2+ M4X3+ M4X4+ M4X5+ M4X6+ M4X7+ M4X8+ M4X9+ M4X10+ M4X11+ M4X12+ M4X13+ M4X14+ M4X15 #=4 ,
348          M5X0+ M5X1+ M5X2+ M5X3+ M5X4+ M5X5+ M5X6+ M5X7+ M5X8+ M5X9+ M5X10+ M5X11+ M5X12+ M5X13+ M5X14+ M5X15 #=4 ,
349          M6X0+ M6X1+ M6X2+ M6X3+ M6X4+ M6X5+ M6X6+ M6X7+ M6X8+ M6X9+ M6X10+ M6X11+ M6X12+ M6X13+ M6X14+ M6X15 #=4 ,
350          M7X0+ M7X1+ M7X2+ M7X3+ M7X4+ M7X5+ M7X6+ M7X7+ M7X8+ M7X9+ M7X10+ M7X11+ M7X12+ M7X13+ M7X14+ M7X15 #=4 ,
351          M8X0+ M8X1+ M8X2+ M8X3+ M8X4+ M8X5+ M8X6+ M8X7+ M8X8+ M8X9+ M8X10+ M8X11+ M8X12+ M8X13+ M8X14+ M8X15 #=4 ,
352          M9X0+ M9X1+ M9X2+ M9X3+ M9X4+ M9X5+ M9X6+ M9X7+ M9X8+ M9X9+ M9X10+ M9X11+ M9X12+ M9X13+ M9X14+ M9X15 #=4 ,
353          M10X0+ M10X1+ M10X2+ M10X3+ M10X4+ M10X5+ M10X6+ M10X7+ M10X8+ M10X9+ M10X10+ M10X11+ M10X12+ M10X13+ M10X14+ M10X15 #=4 ,
354          M11X0+ M11X1+ M11X2+ M11X3+ M11X4+ M11X5+ M11X6+ M11X7+ M11X8+ M11X9+ M11X10+ M11X11+ M11X12+ M11X13+ M11X14+ M11X15 #=4 ,
355          M12X0+ M12X1+ M12X2+ M12X3+ M12X4+ M12X5+ M12X6+ M12X7+ M12X8+ M12X9+ M12X10+ M12X11+ M12X12+ M12X13+ M12X14+ M12X15 #=4 ,
356          M13X0+ M13X1+ M13X2+ M13X3+ M13X4+ M13X5+ M13X6+ M13X7+ M13X8+ M13X9+ M13X10+ M13X11+ M13X12+ M13X13+ M13X14+ M13X15 #=4 ,
357          M14X0+ M14X1+ M14X2+ M14X3+ M14X4+ M14X5+ M14X6+ M14X7+ M14X8+ M14X9+ M14X10+ M14X11+ M14X12+ M14X13+ M14X14+ M14X15 #=4 ,
358          M15X0+ M15X1+ M15X2+ M15X3+ M15X4+ M15X5+ M15X6+ M15X7+ M15X8+ M15X9+ M15X10+ M15X11+ M15X12+ M15X13+ M15X14+ M15X15 #=4 ,
359          M0X0+ M0X1+ M0X2+ M0X3+ M0X4+ M0X5+ M0X6+ M0X7+ M0X8+ M0X9+ M0X10+ M0X11+ M0X12+ M0X13+ M0X14+ M0X15 #=4 ,
360          M0X0+ M1X0+ M2X0+ M3X0+ M4X0+ M5X0+ M6X0+ M7X0+ M8X0+ M9X0+ M10X0+ M11X0+ M12X0+ M13X0+ M14X0+ M15X0 #=4 ,
361          M1X0+ M1X1+ M1X2+ M1X3+ M1X4+ M1X5+ M1X6+ M1X7+ M1X8+ M1X9+ M1X10+ M1X11+ M1X12+ M1X13+ M1X14+ M1X15 #=4 ,
362          M0X1+ M1X1+ M2X1+ M3X1+ M4X1+ M5X1+ M6X1+ M7X1+ M8X1+ M9X1+ M10X1+ M11X1+ M12X1+ M13X1+ M14X1+ M15X1 #=4 ,
363          M2X0+ M2X1+ M2X2+ M2X3+ M2X4+ M2X5+ M2X6+ M2X7+ M2X8+ M2X9+ M2X10+ M2X11+ M2X12+ M2X13+ M2X14+ M2X15 #=4 ,
364          M0X2+ M1X2+ M2X2+ M3X2+ M4X2+ M5X2+ M6X2+ M7X2+ M8X2+ M9X2+ M10X2+ M11X2+ M12X2+ M13X2+ M14X2+ M15X2 #=4 ,
365          M3X0+ M3X1+ M3X2+ M3X3+ M3X4+ M3X5+ M3X6+ M3X7+ M3X8+ M3X9+ M3X10+ M3X11+ M3X12+ M3X13+ M3X14+ M3X15 #=4 ,
366          M0X3+ M1X3+ M2X3+ M3X3+ M4X3+ M5X3+ M6X3+ M7X3+ M8X3+ M9X3+ M10X3+ M11X3+ M12X3+ M13X3+ M14X3+ M15X3 #=4 ,
367          M4X0+ M4X1+ M4X2+ M4X3+ M4X4+ M4X5+ M4X6+ M4X7+ M4X8+ M4X9+ M4X10+ M4X11+ M4X12+ M4X13+ M4X14+ M4X15 #=4 ,
368          M0X4+ M1X4+ M2X4+ M3X4+ M4X4+ M5X4+ M6X4+ M7X4+ M8X4+ M9X4+ M10X4+ M11X4+ M12X4+ M13X4+ M14X4+ M15X4 #=4 ,
369          M5X0+ M5X1+ M5X2+ M5X3+ M5X4+ M5X5+ M5X6+ M5X7+ M5X8+ M5X9+ M5X10+ M5X11+ M5X12+ M5X13+ M5X14+ M5X15 #=4 ,
370          M0X5+ M1X5+ M2X5+ M3X5+ M4X5+ M5X5+ M6X5+ M7X5+ M8X5+ M9X5+ M10X5+ M11X5+ M12X5+ M13X5+ M14X5+ M15X5 #=4 ,
371          M6X0+ M6X1+ M6X2+ M6X3+ M6X4+ M6X5+ M6X6+ M6X7+ M6X8+ M6X9+ M6X10+ M6X11+ M6X12+ M6X13+ M6X14+ M6X15 #=4 ,
372          M0X6+ M1X6+ M2X6+ M3X6+ M4X6+ M5X6+ M6X6+ M7X6+ M8X6+ M9X6+ M10X6+ M11X6+ M12X6+ M13X6+ M14X6+ M15X6 #=4 ,
373          M7X0+ M7X1+ M7X2+ M7X3+ M7X4+ M7X5+ M7X6+ M7X7+ M7X8+ M7X9+ M7X10+ M7X11+ M7X12+ M7X13+ M7X14+ M7X15 #=4 ,
374          M0X7+ M1X7+ M2X7+ M3X7+ M4X7+ M5X7+ M6X7+ M7X7+ M8X7+ M9X7+ M10X7+ M11X7+ M12X7+ M13X7+ M14X7+ M15X7 #=4 ,
375          M8X0+ M8X1+ M8X2+ M8X3+ M8X4+ M8X5+ M8X6+ M8X7+ M8X8+ M8X9+ M8X10+ M8X11+ M8X12+ M8X13+ M8X14+ M8X15 #=4 ,
376          M0X8+ M1X8+ M2X8+ M3X8+ M4X8+ M5X8+ M6X8+ M7X8+ M8X8+ M9X8+ M10X8+ M11X8+ M12X8+ M13X8+ M14X8+ M15X8 #=4 ,
377          M9X0+ M9X1+ M9X2+ M9X3+ M9X4+ M9X5+ M9X6+ M9X7+ M9X8+ M9X9+ M9X10+ M9X11+ M9X12+ M9X13+ M9X14+ M9X15 #=4 ,
378          M0X9+ M1X9+ M2X9+ M3X9+ M4X9+ M5X9+ M6X9+ M7X9+ M8X9+ M9X9+ M10X9+ M11X9+ M12X9+ M13X9+ M14X9+ M15X9 #=4 ,
379          M10X0+ M10X1+ M10X2+ M10X3+ M10X4+ M10X5+ M10X6+ M10X7+ M10X8+ M10X9+ M10X10+ M10X11+ M10X12+ M10X13+ M10X14+ M10X15 #=4 ,
380          M0X10+ M1X10+ M2X10+ M3X10+ M4X10+ M5X10+ M6X10+ M7X10+ M8X10+ M9X10+ M10X10+ M11X10+ M12X10+ M13X10+ M14X10+ M15X10 #=4 ,
381          M11X0+ M11X1+ M11X2+ M11X3+ M11X4+ M11X5+ M11X6+ M11X7+ M11X8+ M11X9+ M11X10+ M11X11+ M11X12+ M11X13+ M11X14+ M11X15 #=4 ,
382          M0X11+ M1X11+ M2X11+ M3X11+ M4X11+ M5X11+ M6X11+ M7X11+ M8X11+ M9X11+ M10X11+ M11X11+ M12X11+ M13X11+ M14X11+ M15X11 #=4 ,
383          M12X0+ M12X1+ M12X2+ M12X3+ M12X4+ M12X5+ M12X6+ M12X7+ M12X8+ M12X9+ M12X10+ M12X11+ M12X12+ M12X13+ M12X14+ M12X15 #=4 ,
384          M0X12+ M1X12+ M2X12+ M3X12+ M4X12+ M5X12+ M6X12+ M7X12+ M8X12+ M9X12+ M10X12+ M11X12+ M12X12+ M13X12+ M14X12+ M15X12 #=4 ,
385          M13X0+ M13X1+ M13X2+ M13X3+ M13X4+ M13X5+ M13X6+ M13X7+ M13X8+ M13X9+ M13X10+ M13X11+ M13X12+ M13X13+ M13X14+ M13X15 #=4 ,
386          M0X13+ M1X13+ M2X13+ M3X13+ M4X13+ M5X13+ M6X13+ M7X13+ M8X13+ M9X13+ M10X13+ M11X13+ M12X13+ M13X13+ M14X13+ M15X13 #=4 ,
387          M14X0+ M14X1+ M14X2+ M14X3+ M14X4+ M14X5+ M14X6+ M14X7+ M14X8+ M14X9+ M14X10+ M14X11+ M14X12+ M14X13+ M14X14+ M14X15 #=4 ,
388          M0X14+ M1X14+ M2X14+ M3X14+ M4X14+ M5X14+ M6X14+ M7X14+ M8X14+ M9X14+ M10X14+ M11X14+ M12X14+ M13X14+ M14X14+ M15X14 #=4 ,
389          M15X0+ M15X1+ M15X2+ M15X3+ M15X4+ M15X5+ M15X6+ M15X7+ M15X8+ M15X9+ M15X10+ M15X11+ M15X12+ M15X13+ M15X14+ M15X15 #=4 ,
390          M0X15+ M1X15+ M2X15+ M3X15+ M4X15+ M5X15+ M6X15+ M7X15+ M8X15+ M9X15+ M10X15+ M11X15+ M12X15+ M13X15+ M14X15+ M15X15 #=4 ,
391          label([M0X0, M0X1, M0X2, M0X3, M0X4, M0X5, M0X6, M0X7, M0X8, M0X9, M0X10, M0X11, M0X12, M0X13, M0X14, M0X15, M1X0, M1X1, M1X2, M1X3, M1X4, M1X5, M1X6, M1X7, M1X8, M1X9, M1X10, M1X11, M1X12, M1X13, M1X14, M1X15, M2X0, M2X1, M2X2, M2X3, M2X4, M2X5, M2X6, M2X7, M2X8, M2X9, M2X10, M2X11, M2X12, M2X13, M2X14, M2X15, M3X0, M3X1, M3X2, M3X3, M3X4, M3X5, M3X6, M3X7, M3X8, M3X9, M3X10, M3X11, M3X12, M3X13, M3X14, M3X15, M4X0, M4X1, M4X2, M4X3, M4X4, M4X5, M4X6, M4X7, M4X8, M4X9, M4X10, M4X11, M4X12, M4X13, M4X14, M4X15, M5X0, M5X1, M5X2, M5X3, M5X4, M5X5, M5X6, M5X7, M5X8, M5X9, M5X10, M5X11, M5X12, M5X13, M5X14, M5X15, M6X0, M6X1, M6X2, M6X3, M6X4, M6X5, M6X6, M6X7, M6X8, M6X9, M6X10, M6X11, M6X12, M6X13, M6X14, M6X15, M7X0, M7X1, M7X2, M7X3, M7X4, M7X5, M7X6, M7X7, M7X8, M7X9, M7X10, M7X11, M7X12, M7X13, M7X14, M7X15, M8X0, M8X1, M8X2, M8X3, M8X4, M8X5, M8X6, M8X7, M8X8, M8X9, M8X10, M8X11, M8X12, M8X13, M8X14, M8X15, M9X0, M9X1, M9X2, M9X3, M9X4, M9X5, M9X6, M9X7, M9X8, M9X9, M9X10, M9X11, M9X12, M9X13, M9X14, M9X15, M10X0, M10X1, M10X2, M10X3, M10X4, M10X5, M10X6, M10X7, M10X8, M10X9, M10X10, M10X11, M10X12, M10X13, M10X14, M10X15, M11X0, M11X1, M11X2, M11X3, M11X4, M11X5, M11X6, M11X7, M11X8, M11X9, M11X10, M11X11, M11X12, M11X13, M11X14, M11X15, M12X0, M12X1, M12X2, M12X3, M12X4, M12X5, M12X6, M12X7, M12X8, M12X9, M12X10, M12X11, M12X12, M12X13, M12X14, M12X15, M13X0, M13X1, M13X2, M13X3, M13X4, M13X5, M13X6, M13X7, M13X8, M13X9, M13X10, M13X11, M13X12, M13X13, M13X14, M13X15, M14X0, M14X1, M14X2, M14X3, M14X4, M14X5, M14X6, M14X7, M14X8, M14X9, M14X10, M14X11, M14X12, M14X13, M14X14, M14X15, M15X0, M15X1, M15X2, M15X3, M15X4, M15X5, M15X6, M15X7, M15X8, M15X9, M15X10, M15X11, M15X12, M15X13, M15X14, M15X15]),
392          sc4(X), 
393          open('res4.txt',append,Stream),
394          write(Stream,X),
395          close(Stream).
396
397
398
399     
400
401 display_m([]).
402 display_m([El|R]):-
403     write(El),
404     display_m(R).
405
406
407 solution(L):-
408     get_time(T0),
409     findall(X,bistoc(X),L),
410     get_time(T1),
411     DT is T1 - T0,
412     write('but : '),writeln(DT),
413     display_m(L).
414
415
416
417