Orbiter 2022
Combinatorial Objects
finite_field_tables.cpp
Go to the documentation of this file.
1// finitefield_tables.cpp
2//
3// Anton Betten
4//
5// started: October 23, 2002
6// moved out of finitefield.cpp: July 5, 2007
7
8
9
10
11#include "foundations.h"
12
13using namespace std;
14
15
16namespace orbiter {
17namespace layer1_foundations {
18
19
20static int finitefield_primes[] = {
21 2, 3, 4, 5, 7, 8, 9, 11, 13, 16,
22 17, 19, 23, 25, 27, 29, 31, 32, 37, 41,
23 43, 47, 49, 53, 59, 61, 67, 71, 73, 79, 81, 83,
24 89, 97, 101, 103, 107, 109, 113, 121, 127, 131, 137,
25 139, 149, 151, 157, 163, 167, 169, 173, 179, 181, 191,
26 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
27 251, 257, 263, 269, 271, 277, 281, 283, 289, 293, 307,
28 311, 313, 317, 331, 337, 347, 349, 353, 359, 367,
29 373, 379, 383, 389, 397, 401, 409, 419, 421, 431,
30 433, 439, 443, 449, 457, 461, 463, 467, 479, 487,
31 491, 499, /* missing */ 761, 941, 1301
32
33
34 };
35static int finitefield_nb_primes =
36 sizeof(finitefield_primes) / sizeof(finitefield_primes[0]);
37
38static int finitefield_largest_degree_irreducible_polynomial[] = {
39 60 /*2*/,
40 42 /*3*/,
41 30 /*4*/,
42 30 /*5*/,
43 20 /*7*/,
44 20 /*8*/,
45 15 /*9*/,
46 15 /*11*/,
47 15 /*13*/,
48 20 /*16*/,
49 10/*17*/,
50 16/*19*/,
51 10/*23*/,
52 16/*25*/,
53 16/*27*/,
54 10/*29*/,
55 12/*31*/,
56 10 /*32*/,
57 10/*37*/,
58 2/*41*/,
59 2/*43*/,
60 2/*47*/,
61 0 /* 49 */,
62 2/*53*/,
63 2/*59*/,
64 2/*61*/,
65 2/*67*/,
66 2/*71*/,
67 2/*73*/,
68 2/*79*/,
69 0/*81*/,
70 2/*83*/,
71 2/*89*/,
72 2/*97*/,
73 2/*101*/,
74 2/*103*/,
75 2/*107*/,
76 2/*109*/,
77 2/*113*/,
78 0/*121*/,
79 2/*127*/,
80 2/*131*/,
81 2/*137*/,
82 2/*139*/,
83 2/*149*/,
84 2/*151*/,
85 2/*157*/,
86 2/*163*/,
87 2/*167*/,
88 0/*169*/,
89 2/*173*/,
90 2/*179*/,
91 2/*181*/,
92 2/*191*/,
93 2/*193*/,
94 2/*197*/,
95 2/*199*/,
96 2/*211*/,
97 2/*223*/,
98 2/*227*/,
99 2/*229*/,
100 2/*233*/,
101 2/*239*/,
102 2/*241*/,
103 2/*251*/,
104 2/*257*/,
105 2/*263*/,
106 2/*269*/,
107 2/*271*/,
108 2/*277*/,
109 2/*281*/,
110 2/*283*/,
111 0/*289*/,
112 2/*293*/,
113 2/*307*/,
114 2/*311*/,
115 2/*313*/,
116 2/*317*/,
117 2/*331*/,
118 2/*337*/,
119 2/*347*/,
120 2/*349*/,
121 2/*353*/,
122 2/*359*/,
123 2/*367*/,
124 2/*373*/,
125 2/*379*/,
126 2/*383*/,
127 2/*389*/,
128 2/*397*/,
129 2/*401*/,
130 2/*409*/,
131 2/*419*/,
132 2/*421*/,
133 2/*431*/,
134 2/*433*/,
135 2/*439*/,
136 2/*443*/,
137 2/*449*/,
138 2/*457*/,
139 2/*461*/,
140 2/*463*/,
141 2/*467*/,
142 2/*479*/,
143 2/*487*/,
144 2/*491*/,
145 2/*499*/,
146 2/*761*/,
147 2/*941*/,
148 2/*1301*/,
149 };
150
151
152static const char *finitefield_primitive_polynomial[][100] = {
153// over GF(2):
154{
155 "7", // X^2+X+1
156 "13", // X^3 + X^2 + 1
157 "25", // X^4 + X^3 + 1
158 "37", // X^5 + X^2 + 1
159 "97", // X^6 + X^5 + 1
160 "193", // X^7 + X^6 + 1
161 "285", // X^8 + X^4 + X^3 + X^2 + 1
162 "529", // X^9 + X^4 + 1
163 "1033", // X^10 + X^3 + 1
164 "2053", // X^11 + X^2 + 1
165 "4179", // X^12 + X^6 + X^4 + X + 1
166 "8219", // X^13 + X^4 + X^3 + X + 1
167 "16427", //X^14 + X^5 + X^3 + X + 1
168 "49153", // X^15 + X^14 + 1
169 "65581", //X^16 + X^5 + X^3 + X^2 + 1
170 "131081", //X^17 + X^3 + 1
171 "262183", //X^18 + X^5 + X^2 + X + 1
172 "524327", //X^19 + X^5 + X^2 + X + 1
173 "1048585", //X^20 + X^3 + 1
174 "2097157", //x^21 + x^2 + 1
175 "6291457", //x^22 + x^21 + 1
176 "8388641", //x^23 + x^5 + 1
177 "16777243", //x^24 + x^4 + x^3 + x + 1
178 "33554441", //x^25 + x^3 + 1
179 "67108935", //x^26 + x^6 + x^2 + x + 1
180 "134217767", //x^27 + x^5 + x^2 + x + 1
181 "268435465", //x^28 + x^3 + 1
182 "536870917", //x^29 + x^2 + 1
183 "1073741907", //X^30 + X^6 + X^4 + X + 1
184 "2147483657", //X^31 + X^3 + 1
185 "4294967471", //X^32 + X^7 + X^5 + X^3 + X^2 + X + 1
186 "8589934675", //X^33 + X^6 + X^4 + X + 1
187 "17179869415", //X^34 + X^7 + X^6 + X^5 + X^2 + X + 1
188 "34359738373", //X^35 + X^2 + 1
189 "68719476855", //X^36 + X^6 + X^5 + X^4 + X^2 + X + 1
190 "137438953535", //X^37 + X^5 + X^4 + X^3 + X^2 + X + 1
191 "274877907043", //X^38 + X^6 + X^5 + X + 1
192 "549755813905", //X^39 + X^4 + 1
193 "1099511627833", //X^40 + X^5 + X^4 + X^3 + 1
194 "2199023255561", //X^41 + X^3 + 1
195 "4398046511167", //X^42 + X^5 + X^4 + X^3 + X^2 + X + 1
196 "8796093022297", //X^43 + X^6 + X^4 + X^3 + 1
197 "17592186044517", //X^44 + X^6 + X^5 + X^2 + 1
198 "35184372088859", //X^45 + X^4 + X^3 + X + 1
199 "70368744177967", //X^46 + X^8 + X^5 + X^3 + X^2 + X + 1
200 "140737488355361", //X^47 + X^5 + 1
201 "281474976710839", //X^48 + X^7 + X^5 + X^4 + X^2 + X + 1
202 "562949953421425", //X^49 + X^6 + X^5 + X^4 + 1
203 "1125899906842653", //X^50 + X^4 + X^3 + X^2 + 1
204 "2251799813685323", //X^51 + X^6 + X^3 + X + 1
205 "4503599627370505", //X^52 + X^3 + 1
206 "9007199254741063", //X^53 + X^6 + X^2 + X + 1
207 "18014398509482109", //X^54 + X^6 + X^5 + X^4 + X^3 + X^2 + 1
208 "36028797018964039", //X^55 + X^6 + X^2 + X + 1
209 "72057594037928085", //X^56 + X^7 + X^4 + X^2 + 1
210 "144115188075855917", //X^57 + X^5 + X^3 + X^2 + 1
211 "288230376151711843", //X^58 + X^6 + X^5 + X + 1
212 "576460752303423611", //X^59 + X^6 + X^5 + X^4 + X^3 + X + 1
213 "1729382256910270465", //X^60 + X^59 + 1
214 "", // 61
215 "", // 62
216 "13835058055282163713", //X^63 + X^62 + 1
217 "18446744073709551643", //X^64 + X^4 + X^3 + X + 1
218 "", // 65
219 "73786976294838206829", //X^66 + X^8 + X^6 + X^5 + X^3 + X^2 + 1
220 "", // 67
221 "295147905179352826019", //X^68 + X^7 + X^5 + X + 1
222 "", // 69
223 "1180591620717411303467", //X^70 + X^5 + X^3 + X + 1
224 "", // 71
225 "4722366482869645213791", //X^72 + X^6 + X^4 + X^3 + X^2 + X + 1
226#if 0
227#endif
228},
229// over GF(3):
230{
231 "14", // X^2 + X + 2
232 "34", // X^3 + 2X + 1
233 "110", // X^4 + X^3 + 2
234 "250", // X^5 + 2X + 1
235 "974", // X^6 + X^5 + 2
236 "2203", // X^7 + X^2 + 2X + 1
237 "6590", // X^{8} + X^{3} + 2
238 "19747", // X^{9} + 2X^{3} + X^{2} + 1
239 "59081", // X^{10} + X^{3} + X + 2
240 "177163", // X^{11} + X^{2} + 2X + 1
241 "531656", // X^{12} + 2X^{4} + X^{3} + 2X^{2} + 2X + 2
242 "1594330", // X^{13} + 2X + 1
243 "6377294", // X^{14} + X^{13} + 2
244 "14348923", // X^{15} + X^{2} + 2X + 1
245 "43046837", // X^{16} + X^{4} + X^{3} + 2X + 2
246 "129140170", // X^{17} + 2X + 1
247 "387420758", // X^{18} + X^{5} + 2X^{2} + 2X + 2
248 "1162261483", // X^{19} + X^{2} + 2X + 1
249 "3486784649", // X^{20} + X^{5} + X + 2
250 "10460353234", // X^{21} + X^{3} + X + 1
251 "31381059662", // X^{22} + X^{3} + 2X^{2} + 2X + 2
252 "94143178858", // X^{23} + X^{3} + X + 1
253 "282429536678", // X^{24} + 2X^{4} + X^{3} + 2X + 2
254 "847288609498", // X^{25} + 2X^{3} + 1
255 "2541865828361", // X^{26} + X^{3} + X + 2
256 "7625597485372", // X^{27} + X^{5} + X^{4} + 2X^{3} + 2X + 1
257 "22876792455293", // X^{28} + X^{5} + X^{4} + 2X + 2
258 "68630377364974", // X^{29} + X^{4} + X^{2} + 1
259 "274521509459534", // X^{30} + X^{29} + 2
260 "617673396283978", // X^{31} + X^{3} + X + 1
261 "1853020188851957", // X^{32} + X^{4} + X^{3} + 2X + 2
262 "5559060566555785", // X^{33} + X^{5} + 2X^{2} + 1
263 "16677181699666601", // X^{34} + X^{3} + X + 2
264 "50031545098999723", // X^{35} + X^{2} + 2X + 1
265 "150094635296999501", // X^{36} + X^{5} + X^{4} + 2X^{3} + 2
266 "450283905890997415", // X^{37} + X^{3} + 2X^{2} + 2X + 1
267 "1350851717672992133", // X^{38} + X^{3} + X^{2} + 2X + 2
268 "4052555153018976583", // X^{39} + X^{5} + 2X^{3} + 2X^{2} + 1
269 "16210220612075905070", // X^{40} + X^{39} + 2
270 "36472996377170786410", // X^{41} + 2X + 1
271 "109418989131512359574", // X^{42} + X^{5} + X^{4} + X^{3} + X^{2} + X + 2
272 "", // 43
273 "984770902183611232910", // X^{44} + X^{3} + 2
274 "2954312706550833698707", // X^{45} + 2X^{3} + X^{2} + 1
275 "", // 46
276 "", // 47
277 "79766443076872509863840", // X^{48} + X^{5} + 2X^{4} + 2X^{3} + 2X^{2} + 2
278 "239299329230617529590147", // X^{49} + 2X^{3} + X^{2} + 1
279 "717897987691852588770464", // X^{50} + 2X^{4} + X^{3} + 2X^{2} + 2X + 2
280 "2153693963075557766310754", // X^{51} + 2X + 1
281 "6461081889226673298932654", // X^{52} + X^{5} + 2X^{4} + 2X + 2
282},
283// over GF(4):
284{
285 "22", // X^{2} + X + 2
286 "86", // X^{3} + X^{2} + X + 2
287 "326", // X^{4} + X^{3} + X + 2
288 "1282", // X^{5} + X^{4} + 2
289 "5126", // X^{6} + X^{5} + X + 2
290 "16411", // X^{7} + X^{2} + 2X + 3
291 "65606", // X^{8} + X^{3} + X + 2
292 "262166", // X^{9} + X^{2} + X + 2
293 "1048675", // X^{10} + X^{3} + 2X^{2} + 3
294 "5242882", // X^{11} + X^{10} + 2
295 "16777554", // X^{12} + X^{4} + X^{3} + X^{2} + 2
296 "83886086", // X^{13} + X^{12} + X + 2
297 "268435499", // X^{14} + 2X^{2} + 2X + 3
298 "1073741959", // X^{15} + 2X^{3} + X + 3
299 "5368709126", // X^{16} + X^{15} + X + 2
300 "17179869290", // X^{17} + X^{3} + 2X^{2} + 2X + 2
301 "68719477018", // X^{18} + X^{4} + X^{2} + 2X + 2
302 "274877906971", // X^{19} + X^{2} + 2X + 3
303 "1099511627846", // X^{20} + X^{3} + X + 2
304 "4398046511126", // X^{21} + X^{2} + X + 2
305 "17592186044715", // X^{22} + X^{4} + 2X^{2} + 2X + 3
306 "70368744177734", // X^{23} + X^{3} + X + 2
307 "281474976711046", // X^{24} + X^{4} + 2X^{3} + X + 2
308 "1125899906842966", // X^{25} + X^{4} + X^{3} + X^{2} + X + 2
309 "4503599627370539", // X^{26} + 2X^{2} + 2X + 3
310 "18014398509482006", // X^{27} + X^{2} + X + 2
311 "90071992547409926", // X^{28} + X^{27} + X + 2
312 "288230376151711787", // X^{29} + 2X^{2} + 2X + 3
313 "1152921504606847314", // X^{30} + X^{4} + X^{3} + X^{2} + 2
314},
315// over GF(5):
316{
317 "32", // X^{2} + X + 2
318 "152", // X^{3} + X^{2} + 2
319 "767", // X^{4} + X^{3} + 3X + 2
320 "3147", // X^{5} + 4X + 2
321 "18752", // X^{6} + X^{5} + 2
322 "93752", // X^{7} + X^{6} + 2
323 "390663", // X^{8} + X^{2} + 2X + 3
324 "1953163", // X^{9} + X^{2} + 2X + 3
325 "11718767", // X^{10} + X^{9} + 3X + 2
326 "58593752", // X^{11} + X^{10} + 2
327 "244140763", // X^{12} + X^{3} + 2X + 3
328 "1464843772", // X^{13} + X^{12} + 4X + 2
329 "6103515787", // X^{14} + X^{3} + X^{2} + 2X + 2
330 "30517578152", // X^{15} + X^{2} + 2
331 "152587890767", // X^{16} + X^{3} + 3X + 2
332 "915527343772", // X^{17} + X^{16} + 4X + 2
333 "3814697266262", // X^{18} + X^{4} + 2X + 2
334 "19073486328262", // X^{19} + X^{3} + 2X + 2
335 "95367431640663", // X^{20} + X^{2} + 2X + 3
336 "476837158203147", // X^{21} + 4X + 2
337 "2861022949218767", // X^{22} + X^{21} + 3X + 2
338 "11920928955078173", // X^{23} + X^{2} + 4X + 3
339 "59604644775390782", // X^{24} + X^{3} + X^{2} + X + 2
340 "357627868652343772", // X^{25} + X^{24} + 4X + 2
341 "1490116119384765787", // X^{26} + X^{3} + X^{2} + 2X + 2
342 "7450580596923828147", // X^{27} + 4X + 2
343 "37252902984619140763", // X^{28} + X^{3} + 2X + 3
344 "186264514923095703278", // X^{29} + X^{3} + X^{2} + 3
345 "931322574615478516308", // X^{30} + X^{4} + 2X^{2} + X + 3
346},
347// over GF(7):
348{
349 "59", // X^{2} + X + 3
350 "366", // X^{3} + 3X + 2
351 "2754", // X^{4} + X^{3} + X + 3
352 "16818", // X^{5} + X + 4
353 "134494", // X^{6} + X^{5} + 5X + 3
354 "823587", // X^{7} + 6X + 2
355 "6588347", // X^{8} + X^{7} + 3
356 "40353665", // X^{9} + X^{2} + X + 2
357 "322828866", // X^{10} + X^{9} + X + 3
358 "1977326754", // X^{11} + X + 4
359 "15818613954", // X^{12} + X^{11} + X + 3
360 "96889010465", // X^{13} + X^{2} + X + 2
361 "775112083287", // X^{14} + X^{13} + 4X + 3
362 "4747561510115", // X^{15} + 3X^{2} + 3X + 4
363 "37980492079547", // X^{16} + X^{15} + 3
364 "232630513987218", // X^{17} + X + 4
365 "1628413597910608", // X^{18} + 3X^{2} + X + 5
366 "11398895185373259", // X^{19} + 2X^{2} + 2X + 4
367 "79792266297612209", // X^{20} + 4X^{2} + X + 5
368},
369// over GF(8):
370{
371 "74", // X^{2} + X + 2
372 "610", // X^{3} + X^{2} + 4X + 2
373 "4650", // X^{4} + X^{3} + 5X + 2
374 "32842", // X^{5} + X^{2} + X + 2
375 "294914", // X^{6} + X^{5} + 2
376 "2359322", // X^{7} + X^{6} + 3X + 2
377 "16777754", // X^{8} + X^{3} + 3X + 2
378 "150994946", // X^{9} + X^{8} + 2
379 "1207959586", // X^{10} + X^{9} + 4X + 2
380 "8589935179", // X^{11} + X^{3} + X^{2} + X + 3
381 "68719477271", // X^{12} + X^{3} + 2X + 7
382 "549755813973", // X^{13} + X^{2} + 2X + 5
383 "4947802325034", // X^{14} + X^{13} + 5X + 2
384 "35184372088982", // X^{15} + 2X^{2} + 2X + 6
385 "281474976711196", // X^{16} + X^{3} + 3X + 4
386 "2251799813685335", // X^{17} + X^{2} + 2X + 7
387 "20266198323167274", // X^{18} + X^{17} + 5X + 2
388 "162129586585337914", // X^{19} + X^{18} + 7X + 2
389 "1152921504606847061", // X^{20} + X^{2} + 2X + 5
390},
391// over GF(9):
392{
393 "111", // X^{2} + 3X + 3
394 "849", // X^{3} + X^{2} + 4X + 3
395 "7293", // X^{4} + X^{3} + 3
396 "65631", // X^{5} + X^{4} + 2X + 3
397 "590511", // X^{6} + X^{5} + 2X + 3
398 "5314422", // X^{7} + X^{6} + X + 3
399 "43046815", // X^{8} + X^{2} + X + 4
400 "387420592", // X^{9} + X^{2} + 2X + 4
401 "3874204947", // X^{10} + X^{9} + 6X + 3
402 "34867844049", // X^{11} + X^{10} + 4X + 3
403 "313810596102", // X^{12} + X^{11} + X + 3
404 "2824295364813", // X^{13} + X^{12} + 3
405 "25418658283347", // X^{14} + X^{13} + 6X + 3
406 "205891132095472", // X^{15} + X^{3} + X^{2} + X + 4
407},
408// over GF(11):
409{
410 "167", // X^{2} + 4X + 2
411 "1346", // X^{3} + X + 4
412 "15985", // X^{4} + X^{3} + X + 2
413 "161187", // X^{5} + X^{2} + X + 4
414 "1932702", // X^{6} + X^{5} + 8X + 2
415 "19487186", // X^{7} + X + 4
416 "233846142", // X^{8} + X^{7} + 8X + 2
417 "2357947722", // X^{9} + 2X + 9
418 "28295372393", // X^{10} + X^{9} + 9X + 2
419 "285311670724", // X^{11} + 10X + 3
420 "3138428376739", // X^{12} + X + 7
421 "34522712143957", // X^{13} + 2X + 4
422 "414272545727185", // X^{14} + X^{13} + X + 2
423 "4177248169415788", // X^{15} + X^{2} + X + 5
424},
425// over GF(13):
426{
427 "184", // X^{2} + X + 2
428 "2368", // X^{3} + X^{2} + 2
429 "30773", // X^{4} + X^{3} + X + 2
430 "371347", // X^{5} + 4X + 2
431 "5198169", // X^{6} + X^{5} + 5X + 2
432 "62748558", // X^{7} + 3X + 2
433 "878479305", // X^{8} + X^{7} + 5X + 2
434 "11420230174", // X^{9} + X^{8} + 6X + 2
435 "148462991237", // X^{10} + X^{9} + X + 2
436 "1930018885901", // X^{11} + X^{10} + X + 2
437 "25090245516598", // X^{12} + X^{11} + 6X + 2
438 "302875106592411", // X^{13} + 12X + 2
439 "4240251492291544", // X^{14} + X^{13} + 2
440 "55123269399790178", // X^{15} + X^{14} + 10X + 2
441},
442// over GF(16):
443{
444 "274", // X^{2} + X + 2
445 "4354", // X^{3} + X^{2} + 2
446 "69762", // X^{4} + X^{3} + 8X + 2
447 "1114194", // X^{5} + X^{4} + 5X + 2
448 "16777516", // X^{6} + X^{2} + 2X + 12
449 "285212674", // X^{7} + X^{6} + 2
450 "4563402834", // X^{8} + X^{7} + 5X + 2
451 "73014444146", // X^{9} + X^{8} + 7X + 2
452 "1168231104562", // X^{10} + X^{9} + 3X + 2
453 "18691697672402", // X^{11} + X^{10} + 13X + 2
454 "299067162755186", // X^{12} + X^{11} + 7X + 2
455 "4785074604081154", // X^{13} + X^{12} + 2
456 "76561193665298578", // X^{14} + X^{13} + 9X + 2
457 "1152921504606847276", // X^{15} + X^{2} + 2X + 12
458 "18446744073709555773", // X^{16} + X^{3} + 3X + 13
459 "313594649253062377474", // X^{17} + X^{16} + 2
460 "5017514388048998039762", // X^{18} + X^{17} + 13X + 2
461 "75557863725914323419394", // X^{19} + X^{2} + 2
462 "1284483683340543498125410", // X^{20} + X^{19} + 6X + 2
463},
464// over GF(17):
465{
466 "309", // X^{2} + X + 3
467 "5290", // X^{3} + X^{2} + 5X + 3
468 "88556", // X^{4} + X^{3} + 7X + 3
469 "1503449", // X^{5} + X^{4} + 4X + 3
470 "25557429", // X^{6} + X^{5} + 3
471 "434476313", // X^{7} + X^{6} + 4X + 3
472 "7386096253", // X^{8} + X^{7} + 8X + 3
473 "125563634026", // X^{9} + X^{8} + 5X + 3
474 "2134581777034", // X^{10} + X^{9} + 5X + 3
475},
476// over GF(19):
477{
478"382", // X^{2} + X + 2
479"6882", // X^{3} + X + 4
480"137182", // X^{4} + X^{3} + 2
481"2476127", // X^{5} + X + 9
482"47045903", // X^{6} + X + 3
483"893871819", // X^{7} + 4X + 4
484"17877435048", // X^{8} + X^{7} + 14X + 2
485"322687698165", // X^{9} + X^{2} + X + 6
486"6131066258214", // X^{10} + X^{2} + 2X + 14
487"116490258898376", // X^{11} + 8X + 5
488"2213314919066195", // X^{12} + X + 15
489"42052983462257196", // X^{13} + 7X + 4
490"841059669245141391", // X^{14} + X^{13} + 11X + 2
491"15181127029874798664", // X^{15} + X^{2} + 4
492"288441413567621168150", // X^{16} + X^{2} + 5X + 13
493},
494// over GF(23):
495{
496"580", // X^{2} + 2X + 5
497"12193", // X^{3} + X + 3
498"292266", // X^{4} + X^{3} + 11X + 5
499"6436369", // X^{5} + X + 3
500"154472306", // X^{6} + X^{5} + 3X + 5
501"3404825574", // X^{7} + 5X + 12
502"78310985861", // X^{8} + X^{2} + 2X + 5
503"1801152661489", // X^{9} + X + 3
504"43227663875439", // X^{10} + X^{9} + 14X + 5
505},
506// over GF(25):
507{
508"655", // X^{2} + X + 5
509"16255", // X^{3} + X^{2} + 5
510"406305", // X^{4} + X^{3} + 2X + 5
511"10156255", // X^{5} + X^{4} + 5
512"253906255", // X^{6} + X^{5} + 5
513"6347656255", // X^{7} + X^{6} + 5
514"158691406280", // X^{8} + X^{7} + X + 5
515"3967285156255", // X^{9} + X^{8} + 5
516"99182128906255", // X^{10} + X^{9} + 5
517"2479553222656255", // X^{11} + X^{10} + 5
518"61988830566406255", // X^{12} + X^{11} + 5
519"1549720764160156255", // X^{13} + X^{12} + 5
520"38743019104003906255", // X^{14} + X^{13} + 5
521"968575477600097656255", // X^{15} + X^{14} + 5
522"24214386940002441406255", // X^{16} + X^{15} + 5
523},
524// over GF(27):
525{
526"867", // X^{2} + 5X + 3
527"20523", // X^{3} + X^{2} + 4X + 3
528"551289", // X^{4} + X^{3} + 6X + 3
529"14880351", // X^{5} + X^{4} + 3
530"401769399", // X^{6} + X^{5} + 3
531"10847773695", // X^{7} + X^{6} + 3
532"292889889687", // X^{8} + X^{7} + 3
533"7908027021471", // X^{9} + X^{8} + 3
534"213516729579639", // X^{10} + X^{9} + 3
535"5764951698650175", // X^{11} + X^{10} + 3
536"155653695863554647", // X^{12} + X^{11} + 3
537"4202649788315975391", // X^{13} + X^{12} + 3
538"113471544284531335479", // X^{14} + X^{13} + 3
539"3063731695682346057855", // X^{15} + X^{14} + 3
540"82720755783423343562007", // X^{16} + X^{15} + 3
541},
542// over GF(29):
543{
544"988", // X^{2} + 5X + 2
545"25261", // X^{3} + X^{2} + X + 2
546"731672", // X^{4} + X^{3} + 2
547"21218432", // X^{5} + X^{4} + 2
548"594823353", // X^{6} + X + 3
549"17844699632", // X^{7} + X^{6} + 2
550"517496289388", // X^{8} + X^{7} + 4X + 2
551"15007392388948", // X^{9} + X^{8} + 4X + 2
552"435214379276304", // X^{10} + X^{9} + 8X + 2
553},
554// over GF(31):
555{
556"1026", // X^{2} + 2X + 3
557"29836", // X^{3} + X + 14
558"953470", // X^{4} + X^{3} + 5X + 3
559"28629200", // X^{5} + X + 18
560"916133176", // X^{6} + X^{5} + 11X + 3
561"27512614160", // X^{7} + X + 18
562"880403652020", // X^{8} + X^{7} + 15X + 3
563"26439622160712", // X^{9} + X + 10
564"846067909141630", // X^{10} + X^{9} + 5X + 3
565"25408476896405057", // X^{11} + 7X + 9
566"813071260684955060", // X^{12} + X^{11} + 15X + 3
567},
568// over GF(32):
569{
570 "1250", // X^{2} + 7X + 2
571 "33890", // X^{3} + X^{2} + 3X + 2
572 "1081474", // X^{4} + X^{3} + 4X + 2
573 "33555462", // X^{5} + X^{2} + 6
574 "1107296258", // X^{6} + X^{5} + 2
575 "35433480354", // X^{7} + X^{6} + 5X + 2
576 "1099511660578", // X^{8} + X^{3} + X + 2
577 "36283883716834", // X^{9} + X^{8} + 7X + 2
578 "1125899906843688", // X^{10} + X^{2} + X + 8
579},
580// over GF(37):
581{
582"1519", // X^{2} + 4X + 2
583"52061", // X^{3} + X^{2} + X + 2
584"1924853", // X^{4} + X^{3} + X + 2
585"71218120", // X^{5} + X^{4} + 2
586"2635070627", // X^{6} + X^{5} + 7X + 2
587"97497603914", // X^{7} + X^{6} + 10X + 2
588"3607411331241", // X^{8} + X^{7} + 5X + 2
589"133474219249518", // X^{9} + X^{8} + 14X + 2
590"4938546112213076", // X^{10} + X^{9} + 4X + 2
591},
592// over GF(41):
593{
594"1810", // X^{2} + 3X + 6
595},
596// over GF(43):
597{
598"1895", // X^{2} + X + 3
599},
600// over GF(47):
601{
602"2308", // X^{2} + 2X + 5
603},
604// over GF(49):
605{
606},
607// over GF(53):
608{
609"3023", // X^{2} + 4X + 2
610},
611// over GF(59):
612{
613"3542", // X^{2} + X + 2
614},
615// over GF(61):
616{
617"3784", // X^{2} + X + 2
618},
619// over GF(67):
620{
621"4759", // X^{2} + 4X + 2
622},
623// over GF(71):
624{
625"5190", // X^{2} + 2X + 7
626},
627// over GF(73):
628{
629"5553", // X^{2} + 3X + 5
630},
631// over GF(79):
632{
633"6323", // X^{2} + X + 3
634},
635// over GF(81):
636{
637},
638// over GF(83):
639{
640"6974", // X^{2} + X + 2
641},
642// over GF(89):
643{
644"8547", // X^{2} + 7X + 3
645},
646// over GF(97):
647{
648"9511", // X^{2} + X + 5
649},
650// over GF(101):
651{
652"10607", // X^{2} + 4X + 2
653},
654// over GF(103):
655{
656"10717", // X^{2} + X + 5
657},
658// over GF(107):
659{
660"11879", // X^{2} + 4X + 2
661},
662// over GF(109):
663{
664"11996", // X^{2} + X + 6
665},
666// over GF(113):
667{
668"14128", // X^{2} + 12X + 3
669},
670// over GF(121):
671{
672},
673// over GF(127):
674{
675"16259", // X^{2} + X + 3
676},
677// over GF(131):
678{
679"17687", // X^{2} + 4X + 2
680},
681// over GF(137):
682{
683"19594", // X^{2} + 6X + 3
684},
685// over GF(139):
686{
687"19462", // X^{2} + X + 2
688},
689// over GF(149):
690{
691"22799", // X^{2} + 4X + 2
692},
693// over GF(151):
694{
695"23109", // X^{2} + 2X + 6
696},
697// over GF(157):
698{
699"25439", // X^{2} + 5X + 5
700},
701// over GF(163):
702{
703"27223", // X^{2} + 4X + 2
704},
705// over GF(167):
706{
707"28061", // X^{2} + X + 5
708},
709// over GF(169):
710{
711},
712// over GF(173):
713{
714"30623", // X^{2} + 4X + 2
715},
716// over GF(179):
717{
718"33296", // X^{2} + 7X + 2
719},
720// over GF(181):
721{
722"33487", // X^{2} + 4X + 2
723},
724// over GF(191):
725{
726"36691", // X^{2} + X + 19
727},
728// over GF(193):
729{
730"37447", // X^{2} + X + 5
731},
732// over GF(197):
733{
734"39796", // X^{2} + 5X + 2
735},
736// over GF(199):
737{
738"40798", // X^{2} + 6X + 3
739},
740// over GF(211):
741{
742"45367", // X^{2} + 4X + 2
743},
744// over GF(223):
745{
746"50178", // X^{2} + 2X + 3
747},
748// over GF(227):
749{
750"53120", // X^{2} + 7X + 2
751},
752// over GF(229):
753{
754"52676", // X^{2} + X + 6
755},
756// over GF(233):
757{
758"54525", // X^{2} + X + 3
759},
760// over GF(239):
761{
762"57606", // X^{2} + 2X + 7
763},
764// over GF(241):
765{
766"58811", // X^{2} + 3X + 7
767},
768// over GF(251):
769{
770"65266", // X^{2} + 9X + 6
771},
772// over GF(257):
773{
774"67594", // X^{2} + 6X + 3
775},
776// over GF(263):
777{
778"69700", // X^{2} + 2X + 5
779},
780// over GF(269):
781{
782"72632", // X^{2} + X + 2
783},
784// over GF(271):
785{
786"73989", // X^{2} + 2X + 6
787},
788// over GF(277):
789{
790"77565", // X^{2} + 3X + 5
791},
792// over GF(281):
793{
794"79245", // X^{2} + X + 3
795},
796// over GF(283):
797{
798"80375", // X^{2} + X + 3
799},
800// over GF(289):
801{
802},
803// over GF(293):
804{
805"86144", // X^{2} + X + 2
806},
807// over GF(307):
808{
809"94561", // X^{2} + X + 5
810},
811// over GF(311):
812{
813"97049", // X^{2} + X + 17
814},
815// over GF(313):
816{
817"98918", // X^{2} + 3X + 10
818},
819// over GF(317):
820{
821"101759", // X^{2} + 4X + 2
822},
823// over GF(331):
824{
825"111219", // X^{2} + 5X + 3
826},
827// over GF(337):
828{
829"115264", // X^{2} + 5X + 10
830},
831// over GF(347):
832{
833"121799", // X^{2} + 4X + 2
834},
835// over GF(349):
836{
837"122152", // X^{2} + X + 2
838},
839// over GF(353):
840{
841"126377", // X^{2} + 5X + 3
842},
843// over GF(359):
844{
845"129247", // X^{2} + X + 7
846},
847// over GF(367):
848{
849"135062", // X^{2} + X + 6
850},
851// over GF(373):
852{
853"140623", // X^{2} + 4X + 2
854},
855// over GF(379):
856{
857"145538", // X^{2} + 5X + 2
858},
859// over GF(383):
860{
861"147077", // X^{2} + X + 5
862},
863// over GF(389):
864{
865"155213", // X^{2} + 10X + 2
866},
867// over GF(397):
868{
869"159599", // X^{2} + 5X + 5
870},
871// over GF(401):
872{
873"162809", // X^{2} + 5X + 3
874},
875// over GF(409):
876{
877"169347", // X^{2} + 5X + 21
878},
879// over GF(419):
880{
881"175982", // X^{2} + X + 2
882},
883// over GF(421):
884{
885"178927", // X^{2} + 4X + 2
886},
887// over GF(431):
888{
889"186199", // X^{2} + X + 7
890},
891// over GF(433):
892{
893"187927", // X^{2} + X + 5
894},
895// over GF(439):
896{
897"194053", // X^{2} + 3X + 15
898},
899// over GF(443):
900{
901"198909", // X^{2} + 6X + 2
902},
903// over GF(449):
904{
905"203849", // X^{2} + 5X + 3
906},
907// over GF(457):
908{
909"210233", // X^{2} + 3X + 13
910},
911// over GF(461):
912{
913"212984", // X^{2} + X + 2
914},
915// over GF(463):
916{
917"215298", // X^{2} + 2X + 3
918},
919// over GF(476):
920{
921"219959", // X^{2} + 4X + 2
922},
923// over GF(479):
924{
925"231849", // X^{2} + 5X + 13
926},
927// over GF(487):
928{
929"238146", // X^{2} + 2X + 3
930},
931// over GF(491):
932{
933"243047", // X^{2} + 4X + 2
934},
935// over GF(499):
936{
937"252002", // X^{2} + 6X + 7
938},
939
940// many missing here
941
942
943// over GF(761):
944{
945"581410", // X^{2} + 3X + 6
946},
947// over GF(941):
948{
949"886424", // X^{2} + X + 2
950},
951// over GF(1301):
952{
953"1700409", // X^{2} + 6X + 2
954},
955};
956
958 int p, int e, int verbose_level)
959{
960 int f_v = (verbose_level >= 1);
961 int idx;
962 //char *s;
964
965 if (f_v) {
966 cout << "knowledge_base::get_primitive_polynomial" << endl;
967 }
968
969 if (!Sorting.int_vec_search(finitefield_primes, finitefield_nb_primes, p, idx)) {
970 cout << "knowledge_base::get_primitive_polynomial "
971 "I don't have prime " << p << " in the tables" << endl;
972 exit(1);
973
974#if 0
975 cout << "searching for a polynomial of degree " << e << endl;
976
977 algebra_global AG;
978
979 s = AG.search_for_primitive_polynomial_of_given_degree(p, e, verbose_level);
980 cout << "the search came up with a polynomial of degree " << e << ", coded as " << s << endl;
981 return s;
982#endif
983
984 }
985 if (e > finitefield_largest_degree_irreducible_polynomial[idx]) {
986 cout << "knowledge_base::get_primitive_polynomial "
987 "I do not have a polynomial" << endl;
988 cout << "of that degree over that field" << endl;
989 cout << "requested: degree " << e << " polynomial over GF(" << p << ")" << endl;
990 exit(1);
991 }
992 const char *m = finitefield_primitive_polynomial[idx][e - 2];
993 if (strlen(m) == 0) {
994 cout << "knowledge_base::get_primitive_polynomial "
995 "I do not have a polynomial" << endl;
996 cout << "of that degree over that field" << endl;
997 cout << "requested: degree " << e << " polynomial over GF(" << p << ")" << endl;
998 exit(1);
999 }
1000 poly.assign(m);
1001 if (f_v) {
1002 cout << "knowledge_base::get_primitive_polynomial done" << endl;
1003 }
1004}
1005
1006
1007}}
1008
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
Definition: sorting.cpp:1094
void get_primitive_polynomial(std::string &poly, int p, int e, int verbose_level)
the orbiter library for the classification of combinatorial objects