1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
|
/*
* ecgen, tool for generating Elliptic curve domain parameters
* Copyright (C) 2017 J08nY
*/
#include "poly.h"
#include <stdlib.h>
polynomial_t ansi_trinomials[] = {
{161, 18}, {162, 27}, {166, 37}, {167, 6}, {169, 34},
{170, 11}, {172, 1}, {174, 13}, {175, 6}, {177, 8},
{178, 31}, {180, 3}, {182, 81}, {183, 56}, {185, 24},
{186, 11}, {191, 9}, {193, 15}, {194, 87}, {196, 3},
{198, 9}, {199, 34}, {201, 14}, {202, 55}, {204, 27},
{207, 43}, {209, 6}, {210, 7}, {212, 105}, {214, 73},
{215, 23}, {217, 45}, {218, 11}, {220, 7}, {223, 33},
{225, 32}, {228, 113}, {231, 26}, {233, 74}, {234, 31},
{236, 5}, {238, 73}, {239, 36}, {241, 70}, {242, 95},
{244, 111}, {247, 82}, {249, 35}, {250, 103}, {252, 15},
{253, 46}, {255, 52}, {257, 12}, {258, 71}, {260, 15},
{263, 93}, {265, 42}, {266, 47}, {268, 25}, {270, 53},
{271, 58}, {273, 23}, {274, 67}, {276, 63}, {278, 5},
{279, 5}, {281, 93}, {282, 35}, {284, 53}, {286, 69},
{287, 71}, {289, 21}, {292, 37}, {294, 33}, {295, 48},
{297, 5}, {300, 5}, {302, 41}, {303, 1}, {305, 102},
{308, 15}, {310, 93}, {313, 79}, {314, 15}, {316, 63},
{318, 45}, {319, 36}, {321, 31}, {322, 67}, {324, 51},
{327, 34}, {329, 50}, {330, 99}, {332, 89}, {333, 2},
{337, 55}, {340, 45}, {342, 125}, {343, 75}, {345, 22},
{346, 63}, {348, 103}, {350, 53}, {351, 34}, {353, 69},
{354, 99}, {358, 57}, {359, 68}, {362, 63}, {364, 9},
{366, 29}, {367, 21}, {369, 91}, {370, 139}, {372, 111},
{375, 16}, {377, 41}, {378, 43}, {380, 47}, {382, 81},
{383, 90}, {385, 6}, {386, 83}, {388, 159}, {390, 9},
{391, 28}, {393, 7}, {394, 135}, {396, 25}, {399, 26},
{401, 152}, {402, 171}, {404, 65}, {406, 141}, {407, 71},
{409, 87}, {412, 147}, {414, 13}, {415, 102}, {417, 107},
{418, 199}, {420, 7}, {422, 149}, {423, 25}, {425, 12},
{426, 63}, {428, 105}, {431, 120}, {433, 33}, {436, 165},
{438, 65}, {439, 49}, {441, 7}, {444, 81}, {446, 105},
{447, 73}, {449, 134}, {450, 47}, {455, 38}, {457, 16},
{458, 203}, {460, 19}, {462, 73}, {463, 93}, {465, 31},
{468, 27}, {470, 9}, {471, 1}, {473, 200}, {474, 191},
{476, 9}, {478, 121}, {479, 104}, {481, 138}, {484, 105},
{486, 81}, {487, 94}, {489, 83}, {490, 219}, {492, 7},
{494, 17}, {495, 76}, {497, 78}, {498, 155}, {500, 27},
{503, 3}, {505, 156}, {506, 23}, {508, 9}, {510, 69},
{511, 10}, {513, 26}, {514, 67}, {516, 21}, {518, 33},
{519, 79}, {521, 32}, {522, 39}, {524, 167}, {526, 97},
{527, 47}, {529, 42}, {532, 1}, {534, 161}, {537, 94},
{538, 195}, {540, 9}, {543, 16}, {545, 122}, {550, 193},
{551, 135}, {553, 39}, {556, 153}, {558, 73}, {559, 34},
{561, 71}, {564, 163}, {566, 153}, {567, 28}, {569, 77},
{570, 67}, {574, 13}, {575, 146}, {577, 25}, {580, 237},
{582, 85}, {583, 130}, {585, 88}, {588, 35}, {590, 93},
{593, 86}, {594, 19}, {596, 273}, {599, 30}, {601, 201},
{602, 215}, {604, 105}, {606, 165}, {607, 105}, {609, 31},
{610, 127}, {612, 81}, {614, 45}, {615, 211}, {617, 200},
{618, 295}, {620, 9}, {622, 297}, {623, 68}, {625, 133},
{626, 251}, {628, 223}, {631, 307}, {633, 101}, {634, 39},
{636, 217}, {639, 16}, {641, 11}, {642, 119}, {646, 249},
{647, 5}, {649, 37}, {650, 3}, {651, 14}, {652, 93},
{654, 33}, {655, 88}, {657, 38}, {658, 55}, {660, 11},
{662, 21}, {663, 107}, {665, 33}, {668, 147}, {670, 153},
{671, 15}, {673, 28}, {676, 31}, {679, 66}, {682, 171},
{684, 209}, {686, 197}, {687, 13}, {689, 14}, {690, 79},
{692, 299}, {694, 169}, {695, 177}, {697, 267}, {698, 215},
{700, 75}, {702, 37}, {705, 17}, {708, 15}, {711, 92},
{713, 41}, {714, 23}, {716, 183}, {718, 165}, {719, 150},
{721, 9}, {722, 231}, {724, 207}, {726, 5}, {727, 180},
{729, 58}, {730, 147}, {732, 343}, {735, 44}, {737, 5},
{738, 347}, {740, 135}, {742, 85}, {743, 90}, {745, 258},
{746, 351}, {748, 19}, {750, 309}, {751, 18}, {753, 158},
{754, 19}, {756, 45}, {758, 233}, {759, 98}, {761, 3},
{762, 83}, {767, 168}, {769, 120}, {772, 7}, {774, 185},
{775, 93}, {777, 29}, {778, 375}, {780, 13}, {782, 329},
{783, 68}, {785, 92}, {791, 30}, {793, 253}, {794, 143},
{798, 53}, {799, 25}, {801, 217}, {804, 75}, {806, 21},
{807, 7}, {809, 15}, {810, 159}, {812, 29}, {814, 21},
{815, 333}, {817, 52}, {818, 119}, {820, 123}, {822, 17},
{823, 9}, {825, 38}, {826, 255}, {828, 189}, {831, 49},
{833, 149}, {834, 15}, {838, 61}, {839, 54}, {841, 144},
{842, 47}, {844, 105}, {845, 2}, {846, 105}, {847, 136},
{849, 253}, {850, 111}, {852, 159}, {855, 29}, {857, 119},
{858, 207}, {860, 35}, {861, 14}, {862, 349}, {865, 1},
{866, 75}, {868, 145}, {870, 301}, {871, 378}, {873, 352},
{876, 149}, {879, 11}, {881, 78}, {882, 99}, {884, 173},
{887, 147}, {889, 127}, {890, 183}, {892, 31}, {894, 173},
{895, 12}, {897, 113}, {898, 207}, {900, 1}, {902, 21},
{903, 35}, {905, 117}, {906, 123}, {908, 143}, {911, 204},
{913, 91}, {916, 183}, {918, 77}, {919, 36}, {921, 221},
{924, 31}, {926, 365}, {927, 403}, {930, 31}, {932, 177},
{935, 417}, {937, 217}, {938, 207}, {942, 45}, {943, 24},
{945, 77}, {948, 189}, {951, 260}, {953, 168}, {954, 131},
{956, 305}, {959, 143}, {961, 18}, {964, 103}, {966, 201},
{967, 36}, {969, 31}, {972, 7}, {975, 19}, {977, 15},
{979, 178}, {982, 177}, {983, 230}, {985, 222}, {986, 3},
{988, 121}, {990, 161}, {991, 39}, {993, 62}, {994, 223},
{996, 65}, {998, 101}, {999, 59}, {1001, 17}, {1007, 75},
{1009, 55}, {1010, 99}, {1012, 115}, {1014, 385}, {1015, 186},
{1020, 135}, {1022, 317}, {1023, 7}, {1025, 294}, {1026, 35},
{1028, 119}, {1029, 98}, {1030, 93}, {1031, 68}, {1033, 108},
{1034, 75}, {1036, 411}, {1039, 21}, {1041, 412}, {1042, 439},
{1044, 41}, {1047, 10}, {1049, 141}, {1050, 159}, {1052, 291},
{1054, 105}, {1055, 24}, {1057, 198}, {1058, 27}, {1062, 49},
{1063, 168}, {1065, 463}, {1071, 7}, {1078, 361}, {1079, 230},
{1081, 24}, {1082, 407}, {1084, 189}, {1085, 62}, {1086, 189},
{1087, 112}, {1089, 91}, {1090, 79}, {1092, 23}, {1094, 57},
{1095, 139}, {1097, 14}, {1098, 83}, {1100, 35}, {1102, 117},
{1103, 65}, {1105, 21}, {1106, 195}, {1108, 327}, {1110, 417},
{1111, 13}, {1113, 107}, {1116, 59}, {1119, 283}, {1121, 62},
{1122, 427}, {1126, 105}, {1127, 27}, {1129, 103}, {1130, 551},
{1134, 129}, {1135, 9}, {1137, 277}, {1138, 31}, {1140, 141},
{1142, 357}, {1145, 227}, {1146, 131}, {1148, 23}, {1151, 90},
{1153, 241}, {1154, 75}, {1156, 307}, {1158, 245}, {1159, 66},
{1161, 365}, {1164, 19}, {1166, 189}, {1167, 133}, {1169, 114},
{1170, 27}, {1174, 133}, {1175, 476}, {1177, 16}, {1178, 375},
{1180, 25}, {1182, 77}, {1183, 87}, {1185, 134}, {1186, 171},
{1188, 75}, {1190, 233}, {1191, 196}, {1193, 173}, {1196, 281},
{1198, 405}, {1199, 114}, {1201, 171}, {1202, 287}, {1204, 43},
{1206, 513}, {1207, 273}, {1209, 118}, {1210, 243}, {1212, 203},
{1214, 257}, {1215, 302}, {1217, 393}, {1218, 91}, {1220, 413},
{1223, 255}, {1225, 234}, {1226, 167}, {1228, 27}, {1230, 433},
{1231, 105}, {1233, 151}, {1234, 427}, {1236, 49}, {1238, 153},
{1239, 4}, {1241, 54}, {1242, 203}, {1246, 25}, {1247, 14},
{1249, 187}, {1252, 97}, {1255, 589}, {1257, 289}, {1260, 21},
{1263, 77}, {1265, 119}, {1266, 7}, {1268, 345}, {1270, 333},
{1271, 17}, {1273, 168}, {1276, 217}, {1278, 189}, {1279, 216},
{1281, 229}, {1282, 231}, {1284, 223}, {1286, 153}, {1287, 470},
{1289, 99}, {1294, 201}, {1295, 38}, {1297, 198}, {1298, 399},
{1300, 75}, {1302, 77}, {1305, 326}, {1306, 39}, {1308, 495},
{1310, 333}, {1311, 476}, {1313, 164}, {1314, 19}, {1319, 129},
{1321, 52}, {1324, 337}, {1326, 397}, {1327, 277}, {1329, 73},
{1332, 95}, {1334, 617}, {1335, 392}, {1337, 75}, {1338, 315},
{1340, 125}, {1343, 348}, {1345, 553}, {1348, 553}, {1350, 237},
{1351, 39}, {1353, 371}, {1354, 255}, {1356, 131}, {1358, 117},
{1359, 98}, {1361, 56}, {1362, 655}, {1364, 239}, {1366, 1},
{1367, 134}, {1369, 88}, {1372, 181}, {1374, 609}, {1375, 52},
{1377, 100}, {1380, 183}, {1383, 130}, {1385, 12}, {1386, 219},
{1388, 11}, {1390, 129}, {1391, 3}, {1393, 300}, {1396, 97},
{1398, 601}, {1399, 55}, {1401, 92}, {1402, 127}, {1404, 81},
{1407, 47}, {1409, 194}, {1410, 383}, {1412, 125}, {1414, 429},
{1415, 282}, {1417, 342}, {1420, 33}, {1422, 49}, {1423, 15},
{1425, 28}, {1426, 103}, {1428, 27}, {1430, 33}, {1431, 17},
{1433, 387}, {1434, 363}, {1436, 83}, {1438, 357}, {1441, 322},
{1442, 395}, {1444, 595}, {1446, 421}, {1447, 195}, {1449, 13},
{1452, 315}, {1454, 297}, {1455, 52}, {1457, 314}, {1458, 243},
{1460, 185}, {1463, 575}, {1465, 39}, {1466, 311}, {1468, 181},
{1470, 49}, {1471, 25}, {1473, 77}, {1476, 21}, {1478, 69},
{1479, 49}, {1481, 32}, {1482, 411}, {1486, 85}, {1487, 140},
{1489, 252}, {1490, 279}, {1492, 307}, {1495, 94}, {1497, 49},
{1500, 25}, {1503, 80}, {1505, 246}, {1508, 599}, {1510, 189},
{1511, 278}, {1513, 399}, {1514, 299}, {1516, 277}, {1518, 69},
{1519, 220}, {1521, 229}, {1524, 27}, {1526, 473}, {1527, 373},
{1529, 60}, {1530, 207}, {1534, 225}, {1535, 404}, {1537, 46},
{1540, 75}, {1542, 365}, {1543, 445}, {1545, 44}, {1548, 63},
{1550, 189}, {1551, 557}, {1553, 252}, {1554, 99}, {1556, 65},
{1558, 9}, {1559, 119}, {1561, 339}, {1562, 95}, {1564, 7},
{1566, 77}, {1567, 127}, {1569, 319}, {1570, 667}, {1572, 501},
{1575, 17}, {1577, 341}, {1578, 731}, {1580, 647}, {1582, 121},
{1583, 20}, {1585, 574}, {1586, 399}, {1588, 85}, {1590, 169},
{1591, 15}, {1593, 568}, {1596, 3}, {1599, 643}, {1601, 548},
{1602, 783}, {1604, 317}, {1606, 153}, {1607, 87}, {1609, 231},
{1612, 771}, {1615, 103}, {1617, 182}, {1618, 211}, {1620, 27},
{1623, 17}, {1625, 69}, {1628, 603}, {1630, 741}, {1631, 668},
{1633, 147}, {1634, 227}, {1636, 37}, {1638, 173}, {1639, 427},
{1641, 287}, {1642, 231}, {1647, 310}, {1649, 434}, {1650, 579},
{1652, 45}, {1655, 53}, {1657, 16}, {1660, 37}, {1663, 99},
{1665, 176}, {1666, 271}, {1668, 459}, {1671, 202}, {1673, 90},
{1674, 755}, {1676, 363}, {1678, 129}, {1679, 20}, {1681, 135},
{1687, 31}, {1689, 758}, {1692, 359}, {1694, 501}, {1695, 29},
{1697, 201}, {1698, 459}, {1700, 225}, {1703, 161}, {1705, 52},
{1708, 93}, {1710, 201}, {1711, 178}, {1713, 250}, {1716, 221},
{1719, 113}, {1721, 300}, {1722, 39}, {1724, 261}, {1726, 753},
{1729, 94}, {1734, 461}, {1735, 418}, {1737, 403}, {1738, 267},
{1740, 259}, {1742, 869}, {1743, 173}, {1745, 369}, {1746, 255},
{1748, 567}, {1750, 457}, {1751, 482}, {1753, 775}, {1756, 99},
{1759, 165}, {1764, 105}, {1767, 250}, {1769, 327}, {1770, 279},
{1772, 371}, {1774, 117}, {1775, 486}, {1777, 217}, {1778, 635},
{1780, 457}, {1782, 57}, {1783, 439}, {1785, 214}, {1788, 819},
{1790, 593}, {1791, 190}, {1793, 114}, {1798, 69}, {1799, 312},
{1801, 502}, {1802, 843}, {1804, 747}, {1806, 101}, {1807, 123},
{1809, 521}, {1810, 171}, {1814, 545}, {1815, 163}, {1817, 479},
{1818, 495}, {1820, 11}, {1823, 684}, {1825, 9}, {1828, 273},
{1830, 381}, {1831, 51}, {1833, 518}, {1836, 243}, {1838, 53},
{1839, 836}, {1841, 66}, {1844, 339}, {1846, 901}, {1847, 180},
{1849, 49}, {1854, 885}, {1855, 39}, {1857, 688}, {1860, 13},
{1862, 149}, {1863, 260}, {1865, 53}, {1866, 11}, {1870, 121},
{1871, 261}, {1873, 199}, {1878, 253}, {1879, 174}, {1881, 370},
{1884, 669}, {1886, 833}, {1887, 353}, {1889, 29}, {1890, 371},
{1895, 873}, {1900, 235}, {1902, 733}, {1903, 778}, {1905, 344},
{1906, 931}, {1908, 945}, {1911, 67}, {1913, 462}, {1918, 477},
{1919, 105}, {1921, 468}, {1924, 327}, {1926, 357}, {1927, 25},
{1929, 31}, {1932, 277}, {1934, 413}, {1935, 103}, {1937, 231},
{1938, 747}, {1940, 113}, {1943, 11}, {1945, 91}, {1946, 51},
{1948, 603}, {1950, 9}, {1951, 121}, {1953, 17}, {1956, 279},
{1958, 89}, {1959, 371}, {1961, 771}, {1962, 99}, {1964, 21},
{1966, 801}, {1967, 26}, {1969, 175}, {1974, 165}, {1975, 841},
{1977, 238}, {1980, 33}, {1983, 113}, {1985, 311}, {1986, 891},
{1988, 555}, {1990, 133}, {1991, 546}, {1993, 103}, {1994, 15},
{1996, 307}, {1999, 367}};
polynomial_t ansi_pentanomials[] = {
{160, 1, 2, 117}, {163, 1, 2, 8}, {164, 1, 2, 49},
{165, 1, 2, 25}, {168, 1, 2, 65}, {171, 1, 3, 42},
{173, 1, 2, 10}, {176, 1, 2, 43}, {179, 1, 2, 4},
{181, 1, 2, 89}, {184, 1, 2, 81}, {187, 1, 2, 20},
{188, 1, 2, 60}, {189, 1, 2, 49}, {190, 1, 2, 47},
{192, 1, 2, 7}, {195, 1, 2, 37}, {197, 1, 2, 21},
{200, 1, 2, 81}, {203, 1, 2, 45}, {205, 1, 2, 21},
{206, 1, 2, 63}, {208, 1, 2, 83}, {211, 1, 2, 165},
{213, 1, 2, 62}, {216, 1, 2, 107}, {219, 1, 2, 65},
{221, 1, 2, 18}, {222, 1, 2, 73}, {224, 1, 2, 159},
{226, 1, 2, 30}, {227, 1, 2, 21}, {229, 1, 2, 21},
{230, 1, 2, 13}, {232, 1, 2, 23}, {235, 1, 2, 45},
{237, 1, 2, 104}, {240, 1, 3, 49}, {243, 1, 2, 17},
{245, 1, 2, 37}, {246, 1, 2, 11}, {248, 1, 2, 243},
{251, 1, 2, 45}, {254, 1, 2, 7}, {256, 1, 2, 155},
{259, 1, 2, 254}, {261, 1, 2, 74}, {262, 1, 2, 207},
{264, 1, 2, 169}, {267, 1, 2, 29}, {269, 1, 2, 117},
{272, 1, 3, 56}, {275, 1, 2, 28}, {277, 1, 2, 33},
{280, 1, 2, 113}, {283, 1, 2, 200}, {285, 1, 2, 77},
{288, 1, 2, 191}, {290, 1, 2, 70}, {291, 1, 2, 76},
{293, 1, 3, 154}, {296, 1, 2, 123}, {298, 1, 2, 78},
{299, 1, 2, 21}, {301, 1, 2, 26}, {304, 1, 2, 11},
{306, 1, 2, 106}, {307, 1, 2, 93}, {309, 1, 2, 26},
{311, 1, 3, 155}, {312, 1, 2, 83}, {315, 1, 2, 142},
{317, 1, 3, 68}, {320, 1, 2, 7}, {323, 1, 2, 21},
{325, 1, 2, 53}, {326, 1, 2, 67}, {328, 1, 2, 51},
{331, 1, 2, 134}, {334, 1, 2, 5}, {335, 1, 2, 250},
{336, 1, 2, 77}, {338, 1, 2, 112}, {339, 1, 2, 26},
{341, 1, 2, 57}, {344, 1, 2, 7}, {347, 1, 2, 96},
{349, 1, 2, 186}, {352, 1, 2, 263}, {355, 1, 2, 138},
{356, 1, 2, 69}, {357, 1, 2, 28}, {360, 1, 2, 49},
{361, 1, 2, 44}, {363, 1, 2, 38}, {365, 1, 2, 109},
{368, 1, 2, 85}, {371, 1, 2, 156}, {373, 1, 3, 172},
{374, 1, 2, 109}, {376, 1, 2, 77}, {379, 1, 2, 222},
{381, 1, 2, 5}, {384, 1, 2, 299}, {387, 1, 2, 146},
{389, 1, 2, 159}, {392, 1, 2, 145}, {395, 1, 2, 333},
{397, 1, 2, 125}, {398, 1, 3, 23}, {400, 1, 2, 245},
{403, 1, 2, 80}, {405, 1, 2, 38}, {408, 1, 2, 323},
{410, 1, 2, 16}, {411, 1, 2, 50}, {413, 1, 2, 33},
{416, 1, 3, 76}, {419, 1, 2, 129}, {421, 1, 2, 81},
{424, 1, 2, 177}, {427, 1, 2, 245}, {429, 1, 2, 14},
{430, 1, 2, 263}, {432, 1, 2, 103}, {434, 1, 2, 64},
{435, 1, 2, 166}, {437, 1, 2, 6}, {440, 1, 2, 37},
{442, 1, 2, 32}, {443, 1, 2, 57}, {445, 1, 2, 225},
{448, 1, 3, 83}, {451, 1, 2, 33}, {452, 1, 2, 10},
{453, 1, 2, 88}, {454, 1, 2, 195}, {456, 1, 2, 275},
{459, 1, 2, 332}, {461, 1, 2, 247}, {464, 1, 2, 310},
{466, 1, 2, 78}, {467, 1, 2, 210}, {469, 1, 2, 149},
{472, 1, 2, 33}, {475, 1, 2, 68}, {477, 1, 2, 121},
{480, 1, 2, 149}, {482, 1, 2, 13}, {483, 1, 2, 352},
{485, 1, 2, 70}, {488, 1, 2, 123}, {491, 1, 2, 270},
{493, 1, 2, 171}, {496, 1, 3, 52}, {499, 1, 2, 174},
{501, 1, 2, 332}, {502, 1, 2, 99}, {504, 1, 3, 148},
{507, 1, 2, 26}, {509, 1, 2, 94}, {512, 1, 2, 51},
{515, 1, 2, 73}, {517, 1, 2, 333}, {520, 1, 2, 291},
{523, 1, 2, 66}, {525, 1, 2, 92}, {528, 1, 2, 35},
{530, 1, 2, 25}, {531, 1, 2, 53}, {533, 1, 2, 37},
{535, 1, 2, 143}, {536, 1, 2, 165}, {539, 1, 2, 37},
{541, 1, 2, 36}, {542, 1, 3, 212}, {544, 1, 2, 87},
{546, 1, 2, 8}, {547, 1, 2, 165}, {548, 1, 2, 385},
{549, 1, 3, 274}, {552, 1, 2, 41}, {554, 1, 2, 162},
{555, 1, 2, 326}, {557, 1, 2, 288}, {560, 1, 2, 157},
{562, 1, 2, 56}, {563, 1, 4, 159}, {565, 1, 2, 66},
{568, 1, 2, 291}, {571, 1, 2, 408}, {572, 1, 2, 238},
{573, 1, 2, 220}, {576, 1, 3, 52}, {578, 1, 2, 138},
{579, 1, 3, 526}, {581, 1, 2, 138}, {584, 1, 2, 361},
{586, 1, 2, 14}, {587, 1, 2, 130}, {589, 1, 2, 365},
{591, 1, 2, 38}, {592, 1, 2, 143}, {595, 1, 2, 9},
{597, 1, 2, 64}, {598, 1, 2, 131}, {600, 1, 2, 239},
{603, 1, 2, 446}, {605, 1, 2, 312}, {608, 1, 2, 213},
{611, 1, 2, 13}, {613, 1, 2, 377}, {616, 1, 2, 465},
{619, 1, 2, 494}, {621, 1, 2, 17}, {624, 1, 2, 71},
{627, 1, 2, 37}, {629, 1, 2, 121}, {630, 1, 2, 49},
{632, 1, 2, 9}, {635, 1, 2, 64}, {637, 1, 2, 84},
{638, 1, 2, 127}, {640, 1, 3, 253}, {643, 1, 2, 153},
{644, 1, 2, 24}, {645, 1, 2, 473}, {648, 1, 2, 235},
{653, 1, 2, 37}, {656, 1, 2, 39}, {659, 1, 2, 25},
{661, 1, 2, 80}, {664, 1, 2, 177}, {666, 1, 2, 100},
{667, 1, 2, 161}, {669, 1, 2, 314}, {672, 1, 2, 91},
{674, 1, 2, 22}, {675, 1, 2, 214}, {677, 1, 2, 325},
{678, 1, 2, 95}, {680, 1, 2, 91}, {681, 1, 2, 83},
{683, 1, 2, 153}, {685, 1, 3, 4}, {688, 1, 2, 71},
{691, 1, 2, 242}, {693, 1, 2, 250}, {696, 1, 2, 241},
{699, 1, 2, 40}, {701, 1, 2, 466}, {703, 1, 2, 123},
{704, 1, 2, 277}, {706, 1, 2, 27}, {707, 1, 2, 141},
{709, 1, 2, 9}, {710, 1, 3, 29}, {712, 1, 2, 623},
{715, 1, 3, 458}, {717, 1, 2, 320}, {720, 1, 2, 625},
{723, 1, 2, 268}, {725, 1, 2, 331}, {728, 1, 2, 51},
{731, 1, 2, 69}, {733, 1, 2, 92}, {734, 1, 2, 67},
{736, 1, 2, 359}, {739, 1, 2, 60}, {741, 1, 2, 34},
{744, 1, 2, 347}, {747, 1, 2, 158}, {749, 1, 2, 357},
{752, 1, 2, 129}, {755, 1, 4, 159}, {757, 1, 2, 359},
{760, 1, 2, 17}, {763, 1, 2, 17}, {764, 1, 2, 12},
{765, 1, 2, 137}, {766, 1, 3, 280}, {768, 1, 2, 115},
{770, 1, 2, 453}, {771, 1, 2, 86}, {773, 1, 2, 73},
{776, 1, 2, 51}, {779, 1, 2, 456}, {781, 1, 2, 209},
{784, 1, 2, 59}, {786, 1, 2, 118}, {787, 1, 2, 189},
{788, 1, 2, 375}, {789, 1, 2, 5}, {790, 1, 2, 111},
{792, 1, 2, 403}, {795, 1, 2, 137}, {796, 1, 2, 36},
{797, 1, 2, 193}, {800, 1, 2, 463}, {802, 1, 2, 102},
{803, 1, 2, 208}, {805, 1, 2, 453}, {808, 1, 3, 175},
{811, 1, 2, 18}, {813, 1, 2, 802}, {816, 1, 3, 51},
{819, 1, 2, 149}, {821, 1, 2, 177}, {824, 1, 2, 495},
{827, 1, 2, 189}, {829, 1, 2, 560}, {830, 1, 2, 241},
{832, 1, 2, 39}, {835, 1, 2, 350}, {836, 1, 2, 606},
{837, 1, 2, 365}, {840, 1, 2, 341}, {843, 1, 2, 322},
{848, 1, 2, 225}, {851, 1, 2, 442}, {853, 1, 2, 461},
{854, 1, 2, 79}, {856, 1, 2, 842}, {859, 1, 2, 594},
{863, 1, 2, 90}, {864, 1, 2, 607}, {867, 1, 2, 380},
{869, 1, 2, 82}, {872, 1, 2, 691}, {874, 1, 2, 110},
{875, 1, 2, 66}, {877, 1, 2, 140}, {878, 1, 2, 343},
{880, 1, 3, 221}, {883, 1, 2, 488}, {885, 1, 2, 707},
{886, 1, 2, 227}, {888, 1, 2, 97}, {891, 1, 2, 364},
{893, 1, 2, 13}, {896, 1, 2, 19}, {899, 1, 3, 898},
{901, 1, 2, 581}, {904, 1, 3, 60}, {907, 1, 3, 26},
{909, 1, 3, 168}, {910, 1, 2, 357}, {912, 1, 2, 569},
{914, 1, 2, 4}, {915, 1, 2, 89}, {917, 1, 2, 22},
{920, 1, 3, 517}, {922, 1, 2, 24}, {923, 1, 2, 142},
{925, 1, 2, 308}, {928, 1, 2, 33}, {929, 1, 2, 36},
{931, 1, 2, 72}, {933, 1, 2, 527}, {934, 1, 3, 800},
{936, 1, 3, 27}, {939, 1, 2, 142}, {940, 1, 2, 204},
{941, 1, 2, 573}, {944, 1, 2, 487}, {946, 1, 3, 83},
{947, 1, 2, 400}, {949, 1, 2, 417}, {950, 1, 2, 859},
{952, 1, 3, 311}, {955, 1, 2, 606}, {957, 1, 2, 158},
{958, 1, 2, 191}, {960, 1, 2, 491}, {962, 1, 2, 18},
{963, 1, 2, 145}, {965, 1, 2, 213}, {968, 1, 2, 21},
{970, 1, 2, 260}, {971, 1, 2, 6}, {973, 1, 2, 113},
{974, 1, 2, 211}, {976, 1, 2, 285}, {978, 1, 2, 376},
{980, 1, 2, 316}, {981, 1, 2, 383}, {984, 1, 2, 349},
{987, 1, 3, 142}, {989, 1, 2, 105}, {992, 1, 2, 585},
{995, 1, 3, 242}, {997, 1, 2, 453}, {1000, 1, 3, 68},
{1002, 1, 2, 266}, {1003, 1, 2, 410}, {1004, 1, 2, 96},
{1005, 1, 2, 41}, {1006, 1, 2, 63}, {1008, 1, 2, 703},
{1011, 1, 2, 17}, {1013, 1, 2, 180}, {1016, 1, 2, 49},
{1017, 1, 2, 746}, {1018, 1, 2, 27}, {1019, 1, 2, 96},
{1021, 1, 2, 5}, {1024, 1, 2, 515}, {1027, 1, 2, 378},
{1032, 1, 2, 901}, {1035, 1, 2, 76}, {1037, 1, 2, 981},
{1038, 1, 2, 41}, {1040, 1, 2, 429}, {1043, 1, 3, 869},
{1045, 1, 2, 378}, {1046, 1, 2, 39}, {1048, 1, 3, 172},
{1051, 1, 3, 354}, {1053, 1, 2, 290}, {1056, 1, 2, 11},
{1059, 1, 3, 6}, {1061, 1, 2, 166}, {1064, 1, 2, 946},
{1066, 1, 2, 258}, {1067, 1, 2, 69}, {1068, 1, 2, 223},
{1069, 1, 2, 146}, {1070, 1, 3, 94}, {1072, 1, 2, 443},
{1073, 1, 3, 235}, {1074, 1, 2, 395}, {1075, 1, 2, 92},
{1076, 1, 2, 22}, {1077, 1, 2, 521}, {1080, 1, 2, 151},
{1083, 1, 2, 538}, {1088, 1, 2, 531}, {1091, 1, 2, 82},
{1093, 1, 2, 173}, {1096, 1, 2, 351}, {1099, 1, 2, 464},
{1101, 1, 2, 14}, {1104, 1, 2, 259}, {1107, 1, 2, 176},
{1109, 1, 2, 501}, {1112, 1, 2, 1045}, {1114, 1, 2, 345},
{1115, 1, 2, 268}, {1117, 1, 2, 149}, {1118, 1, 2, 475},
{1120, 1, 3, 386}, {1123, 1, 2, 641}, {1124, 1, 2, 156},
{1125, 1, 2, 206}, {1128, 1, 3, 7}, {1131, 1, 2, 188},
{1132, 1, 2, 20}, {1133, 1, 2, 667}, {1136, 1, 2, 177},
{1139, 1, 2, 45}, {1141, 1, 2, 134}, {1143, 1, 2, 7},
{1144, 1, 2, 431}, {1147, 1, 2, 390}, {1149, 1, 2, 221},
{1150, 1, 2, 63}, {1152, 1, 2, 971}, {1155, 1, 2, 94},
{1157, 1, 2, 105}, {1160, 1, 2, 889}, {1162, 1, 2, 288},
{1163, 1, 2, 33}, {1165, 1, 2, 494}, {1168, 1, 2, 473},
{1171, 1, 2, 396}, {1172, 1, 2, 426}, {1173, 1, 2, 673},
{1176, 1, 2, 19}, {1179, 1, 2, 640}, {1181, 1, 2, 82},
{1184, 1, 2, 1177}, {1187, 1, 2, 438}, {1189, 1, 2, 102},
{1192, 1, 3, 831}, {1194, 1, 2, 317}, {1195, 1, 2, 293},
{1197, 1, 2, 269}, {1200, 1, 3, 739}, {1203, 1, 2, 226},
{1205, 1, 2, 4}, {1208, 1, 2, 915}, {1211, 1, 2, 373},
{1213, 1, 2, 245}, {1216, 1, 2, 155}, {1219, 1, 2, 225},
{1221, 1, 2, 101}, {1222, 1, 2, 215}, {1224, 1, 2, 157},
{1227, 1, 2, 361}, {1229, 1, 2, 627}, {1232, 1, 2, 225},
{1235, 1, 2, 642}, {1237, 1, 2, 150}, {1240, 1, 2, 567},
{1243, 1, 2, 758}, {1244, 1, 2, 126}, {1245, 1, 2, 212},
{1248, 1, 2, 1201}, {1250, 1, 2, 37}, {1251, 1, 2, 1004},
{1253, 1, 2, 141}, {1254, 1, 2, 697}, {1256, 1, 2, 171},
{1258, 1, 2, 503}, {1259, 1, 2, 192}, {1261, 1, 2, 14},
{1262, 1, 2, 793}, {1264, 1, 2, 285}, {1267, 1, 2, 197},
{1269, 1, 2, 484}, {1272, 1, 2, 223}, {1274, 1, 2, 486},
{1275, 1, 2, 25}, {1277, 1, 2, 451}, {1280, 1, 2, 843},
{1283, 1, 2, 70}, {1285, 1, 2, 564}, {1288, 1, 2, 215},
{1290, 1, 2, 422}, {1291, 1, 2, 245}, {1292, 1, 2, 78},
{1293, 1, 2, 26}, {1296, 1, 2, 379}, {1299, 1, 2, 172},
{1301, 1, 2, 297}, {1303, 1, 2, 306}, {1304, 1, 3, 574},
{1307, 1, 2, 157}, {1309, 1, 2, 789}, {1312, 1, 2, 1265},
{1315, 1, 2, 270}, {1316, 1, 2, 12}, {1317, 1, 2, 254},
{1318, 1, 3, 94}, {1320, 1, 2, 835}, {1322, 1, 2, 538},
{1323, 1, 2, 1198}, {1325, 1, 2, 526}, {1328, 1, 2, 507},
{1330, 1, 2, 609}, {1331, 1, 2, 289}, {1333, 1, 2, 276},
{1336, 1, 2, 815}, {1339, 1, 2, 284}, {1341, 1, 2, 53},
{1342, 1, 2, 477}, {1344, 1, 2, 469}, {1346, 1, 2, 57},
{1347, 1, 2, 61}, {1349, 1, 2, 40}, {1352, 1, 2, 583},
{1355, 1, 2, 117}, {1357, 1, 2, 495}, {1360, 1, 2, 393},
{1363, 1, 2, 852}, {1365, 1, 2, 329}, {1368, 1, 2, 41},
{1370, 1, 2, 108}, {1371, 1, 2, 145}, {1373, 1, 2, 613},
{1376, 1, 2, 1201}, {1378, 1, 2, 362}, {1379, 1, 2, 400},
{1381, 1, 2, 56}, {1382, 1, 3, 58}, {1384, 1, 2, 1131},
{1387, 1, 2, 33}, {1389, 1, 2, 41}, {1392, 1, 2, 485},
{1394, 1, 2, 30}, {1395, 1, 2, 233}, {1397, 1, 2, 397},
{1400, 1, 2, 493}, {1403, 1, 2, 717}, {1405, 1, 2, 558},
{1406, 1, 2, 13}, {1408, 1, 3, 45}, {1411, 1, 2, 200},
{1413, 1, 2, 101}, {1416, 1, 3, 231}, {1418, 1, 2, 283},
{1419, 1, 2, 592}, {1421, 1, 2, 30}, {1424, 1, 2, 507},
{1427, 1, 2, 900}, {1429, 1, 2, 149}, {1432, 1, 2, 251},
{1435, 1, 2, 126}, {1437, 1, 2, 545}, {1439, 1, 2, 535},
{1440, 1, 3, 1023}, {1443, 1, 2, 413}, {1445, 1, 2, 214},
{1448, 1, 3, 212}, {1450, 1, 2, 155}, {1451, 1, 2, 193},
{1453, 1, 2, 348}, {1456, 1, 2, 1011}, {1459, 1, 2, 1032},
{1461, 1, 2, 446}, {1462, 1, 2, 165}, {1464, 1, 2, 275},
{1467, 1, 2, 113}, {1469, 1, 2, 775}, {1472, 1, 2, 613},
{1474, 1, 2, 59}, {1475, 1, 2, 208}, {1477, 1, 2, 1325},
{1480, 1, 2, 285}, {1483, 1, 2, 1077}, {1484, 1, 2, 61},
{1485, 1, 2, 655}, {1488, 1, 2, 463}, {1491, 1, 2, 544},
{1493, 1, 2, 378}, {1494, 1, 2, 731}, {1496, 1, 2, 181},
{1498, 1, 2, 416}, {1499, 1, 2, 477}, {1501, 1, 2, 60},
{1502, 1, 2, 111}, {1504, 1, 2, 207}, {1506, 1, 2, 533},
{1507, 1, 2, 900}, {1509, 1, 2, 209}, {1512, 1, 2, 1121},
{1515, 1, 2, 712}, {1517, 1, 2, 568}, {1520, 1, 2, 81},
{1522, 1, 2, 47}, {1523, 1, 2, 240}, {1525, 1, 2, 102},
{1528, 1, 2, 923}, {1531, 1, 2, 1125}, {1532, 1, 2, 466},
{1533, 1, 2, 763}, {1536, 1, 2, 881}, {1538, 1, 2, 6},
{1539, 1, 2, 80}, {1541, 1, 2, 4}, {1544, 1, 2, 99},
{1546, 1, 2, 810}, {1547, 1, 2, 493}, {1549, 1, 2, 426},
{1552, 1, 2, 83}, {1555, 1, 2, 254}, {1557, 1, 2, 20},
{1560, 1, 2, 11}, {1563, 1, 2, 41}, {1565, 1, 2, 18},
{1568, 1, 2, 133}, {1571, 1, 2, 21}, {1573, 1, 2, 461},
{1574, 1, 2, 331}, {1576, 1, 2, 147}, {1579, 1, 2, 374},
{1581, 1, 2, 160}, {1584, 1, 2, 895}, {1587, 1, 2, 433},
{1589, 1, 2, 882}, {1592, 1, 2, 223}, {1594, 1, 2, 971},
{1595, 1, 2, 18}, {1597, 1, 2, 42}, {1598, 1, 2, 385},
{1600, 1, 2, 57}, {1603, 1, 2, 917}, {1605, 1, 2, 46},
{1608, 1, 2, 271}, {1610, 1, 2, 250}, {1611, 1, 2, 58},
{1613, 1, 2, 48}, {1614, 1, 2, 1489}, {1616, 1, 2, 139},
{1619, 1, 2, 289}, {1621, 1, 2, 1577}, {1622, 1, 2, 1341},
{1624, 1, 2, 1095}, {1626, 1, 2, 191}, {1627, 1, 2, 189},
{1629, 1, 2, 397}, {1632, 1, 2, 211}, {1635, 1, 2, 113},
{1637, 1, 2, 234}, {1640, 1, 2, 715}, {1643, 1, 2, 760},
{1644, 1, 2, 236}, {1645, 1, 2, 938}, {1646, 1, 2, 435},
{1648, 1, 2, 77}, {1651, 1, 2, 873}, {1653, 1, 2, 82},
{1654, 1, 3, 201}, {1656, 1, 2, 361}, {1658, 1, 2, 552},
{1659, 1, 2, 374}, {1661, 1, 2, 84}, {1662, 1, 3, 958},
{1664, 1, 2, 399}, {1667, 1, 2, 1020}, {1669, 1, 2, 425},
{1670, 1, 2, 19}, {1672, 1, 2, 405}, {1675, 1, 2, 77},
{1677, 1, 2, 844}, {1680, 1, 2, 1549}, {1682, 1, 2, 354},
{1683, 1, 2, 1348}, {1684, 1, 2, 474}, {1685, 1, 2, 493},
{1686, 1, 2, 887}, {1688, 1, 2, 921}, {1690, 1, 2, 200},
{1691, 1, 2, 556}, {1693, 1, 2, 137}, {1696, 1, 2, 737},
{1699, 1, 2, 405}, {1701, 1, 2, 568}, {1702, 1, 2, 245},
{1704, 1, 3, 55}, {1706, 1, 2, 574}, {1707, 1, 2, 221},
{1709, 1, 2, 201}, {1712, 1, 2, 445}, {1714, 1, 2, 191},
{1715, 1, 2, 612}, {1717, 1, 2, 881}, {1718, 1, 2, 535},
{1720, 1, 2, 525}, {1723, 1, 2, 137}, {1725, 1, 2, 623},
{1727, 1, 2, 22}, {1728, 1, 2, 545}, {1730, 1, 2, 316},
{1731, 1, 2, 925}, {1732, 1, 2, 75}, {1733, 1, 2, 285},
{1736, 1, 2, 435}, {1739, 1, 2, 409}, {1741, 1, 3, 226},
{1744, 1, 2, 35}, {1747, 1, 2, 93}, {1749, 1, 2, 236},
{1752, 1, 2, 559}, {1754, 1, 2, 75}, {1755, 1, 2, 316},
{1757, 1, 2, 21}, {1758, 1, 2, 221}, {1760, 1, 3, 1612},
{1761, 1, 2, 131}, {1762, 1, 2, 318}, {1763, 1, 2, 345},
{1765, 1, 2, 165}, {1766, 1, 2, 1029}, {1768, 1, 2, 1403},
{1771, 1, 2, 297}, {1773, 1, 2, 50}, {1776, 1, 2, 17},
{1779, 1, 3, 1068}, {1781, 1, 2, 18}, {1784, 1, 2, 1489},
{1786, 1, 2, 614}, {1787, 1, 2, 457}, {1789, 1, 2, 80},
{1792, 1, 2, 341}, {1794, 1, 2, 95}, {1795, 1, 2, 89},
{1796, 1, 2, 829}, {1797, 1, 2, 80}, {1800, 1, 2, 1013},
{1803, 1, 2, 248}, {1805, 1, 2, 82}, {1808, 1, 2, 25},
{1811, 1, 2, 117}, {1812, 1, 2, 758}, {1813, 1, 3, 884},
{1816, 1, 2, 887}, {1819, 1, 2, 116}, {1821, 1, 2, 326},
{1822, 1, 3, 31}, {1824, 1, 2, 821}, {1826, 1, 2, 298},
{1827, 1, 2, 154}, {1829, 1, 2, 162}, {1832, 1, 3, 1078},
{1834, 1, 2, 210}, {1835, 1, 2, 288}, {1837, 1, 2, 200},
{1840, 1, 2, 195}, {1842, 1, 2, 799}, {1843, 1, 2, 872},
{1845, 1, 2, 526}, {1848, 1, 2, 871}, {1850, 1, 2, 79},
{1851, 1, 2, 250}, {1852, 1, 2, 339}, {1853, 1, 2, 705},
{1856, 1, 2, 585}, {1858, 1, 2, 1368}, {1859, 1, 2, 120},
{1861, 1, 2, 509}, {1864, 1, 2, 1379}, {1867, 1, 2, 117},
{1868, 1, 2, 250}, {1869, 1, 2, 617}, {1872, 1, 3, 60},
{1874, 1, 2, 70}, {1875, 1, 2, 412}, {1876, 1, 2, 122},
{1877, 1, 2, 796}, {1880, 1, 2, 1647}, {1882, 1, 2, 128},
{1883, 1, 2, 1062}, {1885, 1, 2, 813}, {1888, 1, 2, 923},
{1891, 1, 2, 1766}, {1892, 1, 3, 497}, {1893, 1, 2, 461},
{1894, 1, 3, 215}, {1896, 1, 2, 451}, {1897, 1, 2, 324},
{1898, 1, 2, 613}, {1899, 1, 2, 485}, {1901, 1, 2, 330},
{1904, 1, 2, 337}, {1907, 1, 2, 45}, {1909, 1, 2, 225},
{1910, 1, 3, 365}, {1912, 1, 2, 599}, {1914, 1, 2, 544},
{1915, 1, 2, 473}, {1916, 1, 2, 502}, {1917, 1, 2, 485},
{1920, 1, 2, 67}, {1922, 1, 2, 36}, {1923, 1, 4, 40},
{1925, 1, 2, 576}, {1928, 1, 2, 763}, {1930, 1, 2, 155},
{1931, 1, 2, 648}, {1933, 1, 2, 971}, {1936, 1, 2, 117},
{1939, 1, 2, 5}, {1941, 1, 2, 1133}, {1942, 1, 2, 147},
{1944, 1, 2, 617}, {1947, 1, 2, 1162}, {1949, 1, 2, 621},
{1952, 1, 3, 65}, {1954, 1, 2, 1226}, {1955, 1, 2, 109},
{1957, 1, 2, 17}, {1960, 1, 2, 939}, {1963, 1, 2, 1137},
{1965, 1, 2, 364}, {1968, 1, 3, 922}, {1970, 1, 2, 388},
{1971, 1, 2, 100}, {1972, 1, 2, 474}, {1973, 1, 2, 438},
{1976, 1, 3, 1160}, {1978, 1, 2, 158}, {1979, 1, 2, 369},
{1981, 1, 2, 96}, {1982, 1, 2, 1027}, {1984, 1, 2, 129},
{1987, 1, 2, 80}, {1989, 1, 2, 719}, {1992, 1, 2, 1241},
{1995, 1, 2, 37}, {1997, 1, 2, 835}, {1998, 1, 3, 1290},
{2000, 1, 2, 981}};
int compare_poly(const void *a, const void *b) {
const polynomial_t *one = a;
const polynomial_t *other = b;
return (one->m - other->m);
}
bool poly_exists(long m) { return m >= 160 && m <= 2000; }
polynomial_t *poly_find(long m) {
if (!poly_exists(m)) {
return NULL;
}
polynomial_t searched = {(int)m};
polynomial_t *tri =
(polynomial_t *)bsearch(&searched, ansi_trinomials,
sizeof(ansi_trinomials) / sizeof(polynomial_t),
sizeof(polynomial_t), &compare_poly);
if (tri) {
return tri;
} else {
return (polynomial_t *)bsearch(
&searched, ansi_pentanomials,
sizeof(ansi_pentanomials) / sizeof(polynomial_t),
sizeof(polynomial_t), &compare_poly);
}
}
GEN poly_find_gen(long m) { return poly_gen(poly_find(m)); }
GEN poly_gen(polynomial_t *polynomial) {
pari_sp ltop = avma;
GEN coeffs = gtovec0(gen_0, polynomial->m + 1);
gel(coeffs, polynomial->m + 1) = gen_1;
gel(coeffs, polynomial->e1 + 1) = gen_1;
gel(coeffs, polynomial->e2 + 1) = gen_1;
gel(coeffs, polynomial->e3 + 1) = gen_1;
gel(coeffs, 1) = gen_1;
GEN poly = gmul(gtopolyrev(coeffs, -1), gmodulss(1, 2));
return gerepilecopy(ltop, ffgen(poly, -1));
}
|