2025-05-10 21:58:58 +08:00

261 lines
20 KiB
C

long ew[512] =
{
0, -512, -512, -512, -512, -512, -512, -1024,
-1024, -1024, -1024, -1536, -1536, -2047, -2047, -2559,
-2559, -3071, -3584, -3584, -4096, -4608, -5119, -5631,
-6656, -7168, -8191, -8703, -9728, -10752, -12287, -13312,
-14847, -15872, -17919, -19456, -20991, -23040, -25087, -27135,
-29696, -32256, -34816, -37375, -40447, -43519, -46591, -49663,
-53247, -56832, -59904, -64000, -67584, -71167, -75263, -78848,
-82432, -86527, -90111, -93695, -97279, -100351, -103423, -106495,
109055, 111616, 113664, 115199, 116223, 116736, 116736, 116223,
114688, 113151, 110080, 106495, 102399, 96767, 90623, 83455,
74751, 65023, 54272, 42495, 29184, 14847, -1024, -18431,
-36863, -56832, -78335, -100864, -124927, -150527, -177663, -205312,
-235007, -265727, -297471, -330240, -364031, -398847, -434176, -470527,
-507392, -544768, -582144, -619520, -656895, -694271, -731135, -766975,
-802304, -836608, -869375, -900608, -930303, -957439, -982528, -1004544,
-1024511, -1040383, -1053183, -1062399, -1067519, -1068543, -1064959, -1056255,
1042943, 1023999, 999423, 969216, 932863, 890368, 841727, 785919,
723968, 655360, 579072, 496639, 406528, 309759, 205824, 94720,
-23040, -147455, -279039, -416767, -560640, -710656, -866303, -1027071,
-1192960, -1363455, -1538048, -1715711, -1896960, -2080255, -2265599, -2451455,
-2638336, -2824704, -3010048, -3193343, -3373567, -3550720, -3722752, -3889664,
-4049920, -4203007, -4347391, -4482559, -4606976, -4720128, -4820992, -4907519,
-4980223, -5037056, -5076991, -5099007, -5102591, -5086719, -5049856, -4991999,
-4911103, -4807167, -4679168, -4526079, -4347903, -4143103, -3911680, -3652607,
3365887, 3051008, 2707456, 2335231, 1933311, 1502719, 1042943, 553984,
35840, -510975, -1086463, -1689600, -2320896, -2978816, -3662847, -4372479,
-5107200, -5864960, -6645759, -7448576, -8271359, -9113088, -9972735, -10848768,
-11739647, -12643328, -13558784, -14483967, -15417344, -16356864, -17300991, -18247679,
-19194367, -20140031, -21082112, -22019072, -22948351, -23867904, -24775679, -25670144,
-26548735, -27409407, -28251136, -29070335, -29866496, -30637056, -31379968, -32094207,
-32777727, -33428479, -34044927, -34626047, -35170303, -35675647, -36142079, -36567040,
-36950528, -37291519, -37588480, -37840896, -38048256, -38210559, -38326271, -38395903,
38419456, 38395903, 38326271, 38210559, 38048256, 37840896, 37588480, 37291519,
36950528, 36567040, 36142079, 35675647, 35170303, 34626047, 34044927, 33428479,
32777727, 32094207, 31379968, 30637056, 29866496, 29070335, 28251136, 27409407,
26548735, 25670144, 24775679, 23867904, 22948351, 22019072, 21082112, 20140031,
19194367, 18247679, 17300991, 16356864, 15417344, 14483967, 13558784, 12643328,
11739647, 10848768, 9972735, 9113088, 8271359, 7448576, 6645759, 5864960,
5107200, 4372479, 3662847, 2978816, 2320896, 1689600, 1086463, 510975,
-35840, -553984, -1042943, -1502719, -1933311, -2335231, -2707456, -3051008,
3365887, 3652607, 3911680, 4143103, 4347903, 4526079, 4679168, 4807167,
4911103, 4991999, 5049856, 5086719, 5102591, 5099007, 5076991, 5037056,
4980223, 4907519, 4820992, 4720128, 4606976, 4482559, 4347391, 4203007,
4049920, 3889664, 3722752, 3550720, 3373567, 3193343, 3010048, 2824704,
2638336, 2451455, 2265599, 2080255, 1896960, 1715711, 1538048, 1363455,
1192960, 1027071, 866303, 710656, 560640, 416767, 279039, 147455,
23040, -94720, -205824, -309759, -406528, -496639, -579072, -655360,
-723968, -785919, -841727, -890368, -932863, -969216, -999423, -1023999,
1042943, 1056255, 1064959, 1068543, 1067519, 1062399, 1053183, 1040383,
1024511, 1004544, 982528, 957439, 930303, 900608, 869375, 836608,
802304, 766975, 731135, 694271, 656895, 619520, 582144, 544768,
507392, 470527, 434176, 398847, 364031, 330240, 297471, 265727,
235007, 205312, 177663, 150527, 124927, 100864, 78335, 56832,
36863, 18431, 1024, -14847, -29184, -42495, -54272, -65023,
-74751, -83455, -90623, -96767, -102399, -106495, -110080, -113151,
-114688, -116223, -116736, -116736, -116223, -115199, -113664, -111616,
109055, 106495, 103423, 100351, 97279, 93695, 90111, 86527,
82432, 78848, 75263, 71167, 67584, 64000, 59904, 56832,
53247, 49663, 46591, 43519, 40447, 37375, 34816, 32256,
29696, 27135, 25087, 23040, 20991, 19456, 17919, 15872,
14847, 13312, 12287, 10752, 9728, 8703, 8191, 7168,
6656, 5631, 5119, 4608, 4096, 3584, 3584, 3071,
2559, 2559, 2047, 2047, 1536, 1536, 1024, 1024,
1024, 1024, 512, 512, 512, 512, 512, 512
};
long fl[16][32] =
{
{
2147483647, 2144896908, 2137142926, 2124240379, 2106220350, 2083126253, 2055013722, 2021950482,
1984016187, 1941302224, 1893911493, 1841958163, 1785567395, 1724875039, 1660027307, 1591180424,
1518500249, 1442161873, 1362349203, 1279254514, 1193077990, 1104027236, 1012316783, 918167571,
821806412, 723465451, 623381597, 521795962, 418953276, 315101294, 210490205, 105372028
}, {
2147483647, 2124240379, 2055013722, 1941302224, 1785567395, 1591180424, 1362349203, 1104027236,
821806412, 521795962, 210490205, -105372028, -418953276, -723465451, -1012316783, -1279254514,
-1518500249, -1724875039, -1893911493, -2021950482, -2106220350, -2144896908, -2137142926, -2083126253,
-1984016187, -1841958163, -1660027307, -1442161873, -1193077990, -918167571, -623381597, -315101294
}, {
2147483647, 2083126253, 1893911493, 1591180424, 1193077990, 723465451, 210490205, -315101294,
-821806412, -1279254514, -1660027307, -1941302224, -2106220350, -2144896908, -2055013722, -1841958163,
-1518500249, -1104027236, -623381597, -105372028, 418953276, 918167571, 1362349203, 1724875039,
1984016187, 2124240379, 2137142926, 2021950482, 1785567395, 1442161873, 1012316783, 521795962
}, {
2147483647, 2021950482, 1660027307, 1104027236, 418953276, -315101294, -1012316783, -1591180424,
-1984016187, -2144896908, -2055013722, -1724875039, -1193077990, -521795962, 210490205, 918167571,
1518500249, 1941302224, 2137142926, 2083126253, 1785567395, 1279254514, 623381597, -105372028,
-821806412, -1442161873, -1893911493, -2124240379, -2106220350, -1841958163, -1362349203, -723465451
}, {
2147483647, 1941302224, 1362349203, 521795962, -418953276, -1279254514, -1893911493, -2144896908,
-1984016187, -1442161873, -623381597, 315101294, 1193077990, 1841958163, 2137142926, 2021950482,
1518500249, 723465451, -210490205, -1104027236, -1785567395, -2124240379, -2055013722, -1591180424,
-821806412, 105372028, 1012316783, 1724875039, 2106220350, 2083126253, 1660027307, 918167571
}, {
2147483647, 1841958163, 1012316783, -105372028, -1193077990, -1941302224, -2137142926, -1724875039,
-821806412, 315101294, 1362349203, 2021950482, 2106220350, 1591180424, 623381597, -521795962,
-1518500249, -2083126253, -2055013722, -1442161873, -418953276, 723465450, 1660027307, 2124240379,
1984016187, 1279254514, 210490205, -918167571, -1785567395, -2144896908, -1893911493, -1104027236
}, {
2147483647, 1724875039, 623381597, -723465451, -1785567395, -2144896908, -1660027307, -521795962,
821806412, 1841958163, 2137142926, 1591180424, 418953276, -918167571, -1893911493, -2124240379,
-1518500249, -315101294, 1012316783, 1941302224, 2106220350, 1442161873, 210490205, -1104027236,
-1984016187, -2083126253, -1362349203, -105372028, 1193077990, 2021950482, 2055013722, 1279254514
}, {
2147483647, 1591180424, 210490205, -1279254514, -2106220350, -1841958163, -623381597, 918167571,
1984016187, 2021950482, 1012316783, -521795962, -1785567395, -2124240379, -1362349203, 105372028,
1518500249, 2144896908, 1660027307, 315101294, -1193077990, -2083126253, -1893911493, -723465451,
821806412, 1941302224, 2055013722, 1104027236, -418953276, -1724875039, -2137142926, -1442161873
}, {
2147483647, 1442161873, -210490205, -1724875039, -2106220350, -1104027236, 623381597, 1941302224,
1984016187, 723465451, -1012316783, -2083126253, -1785567395, -315101294, 1362349203, 2144896908,
1518500249, -105372028, -1660027307, -2124240379, -1193077990, 521795962, 1893911493, 2021950482,
821806412, -918167571, -2055013722, -1841958163, -418953276, 1279254514, 2137142926, 1591180424
}, {
2147483647, 1279254514, -623381597, -2021950482, -1785567395, -105372028, 1660027307, 2083126253,
821806412, -1104027236, -2137142926, -1442161873, 418953276, 1941302224, 1893911493, 315101294,
-1518500249, -2124240379, -1012316783, 918167571, 2106220350, 1591180424, -210490205, -1841958163,
-1984016187, -521795962, 1362349203, 2144896908, 1193077990, -723465450, -2055013722, -1724875039
}, {
2147483647, 1104027236, -1012316783, -2144896908, -1193077990, 918167571, 2137142926, 1279254514,
-821806412, -2124240379, -1362349203, 723465450, 2106220350, 1442161873, -623381597, -2083126253,
-1518500249, 521795962, 2055013722, 1591180424, -418953276, -2021950482, -1660027307, 315101294,
1984016187, 1724875039, -210490205, -1941302224, -1785567395, 105372028, 1893911493, 1841958163
}, {
2147483647, 918167571, -1362349203, -2083126253, -418953276, 1724875039, 1893911493, -105372028,
-1984016187, -1591180424, 623381597, 2124240379, 1193077990, -1104027236, -2137142926, -723465451,
1518500249, 2021950482, 210490205, -1841958163, -1785567395, 315101294, 2055013722, 1442161873,
-821806412, -2144896908, -1012316783, 1279254514, 2106220350, 521795962, -1660027307, -1941302224
}, {
2147483647, 723465451, -1660027307, -1841958163, 418953276, 2124240379, 1012316783, -1442161873,
-1984016187, 105372028, 2055013722, 1279254514, -1193077990, -2083126253, -210490205, 1941302224,
1518500249, -918167571, -2137142926, -521795962, 1785567395, 1724875039, -623381597, -2144896908,
-821806412, 1591180424, 1893911493, -315101294, -2106220350, -1104027236, 1362349203, 2021950482
}, {
2147483647, 521795962, -1893911493, -1442161873, 1193077990, 2021950482, -210490205, -2124240379,
-821806412, 1724875039, 1660027307, -918167571, -2106220350, -105372028, 2055013722, 1104027236,
-1518500249, -1841958163, 623381597, 2144896908, 418953276, -1941302224, -1362349203, 1279254514,
1984016187, -315101294, -2137142926, -723465451, 1785567395, 1591180424, -1012316783, -2083126253
}, {
2147483647, 315101294, -2055013722, -918167571, 1785567395, 1442161873, -1362349203, -1841958163,
821806412, 2083126253, -210490205, -2144896908, -418953276, 2021950482, 1012316783, -1724875039,
-1518500249, 1279254514, 1893911493, -723465450, -2106220350, 105372028, 2137142926, 521795962,
-1984016187, -1104027236, 1660027307, 1591180424, -1193077990, -1941302224, 623381597, 2124240379
}, {
2147483647, 105372028, -2137142926, -315101294, 2106220350, 521795962, -2055013722, -723465451,
1984016187, 918167571, -1893911493, -1104027236, 1785567395, 1279254514, -1660027307, -1442161873,
1518500249, 1591180424, -1362349203, -1724875039, 1193077990, 1841958163, -1012316783, -1941302224,
821806412, 2021950482, -623381597, -2083126253, 418953276, 2124240379, -210490205, -2144896908
}
};
long ca_enc[8] =
{
-1104871221, -1013036688, -672972958, -390655621, -203096531, -87972919, -30491193, -7945635
};
long cs_enc[8] =
{
1841452035, 1893526520, 2039311994, 2111652007, 2137858230, 2145680959, 2147267170, 2147468947
};
long cos_l[18][36] =
{
{
63283832, 170637571, 249737143, 298179147, 314491698, 298179147, 249737143, 170637571, 63283832,
-69062184, -222379212, -392008792, -572796813, -759250124, -945703435, -1126491457, -1296121036, -1449438064,
-1581784081, -1689137820, -1768237392, -1816679397, -1832991948, -1816679397, -1768237392, -1689137820, -1581784081,
-1449438064, -1296121036, -1126491457, -945703435, -759250124, -572796813, -392008792, -222379212, -69062184
}, {
-74314931, -258966078, -460824098, -640236213, -759250124, -786687264, -702414579, -500284046, -189369869,
206660948, 651982862, 1102570034, 1511212175, 1832991948, 2030569848, 2078643179, 1967042654, 1702091766,
1306060948, 814775745, 273658566, -267329592, -759250124, -1159593886, -1436897244, -1574025869, -1569745749,
-1438406965, -1207792529, -915404502, -603646369, -314491698, -84288696, 60668643, 107267261, 57023852
}, {
-50329886, -36586865, 139768215, 436269664, 759250124, 990653814, 1023470462, 795836990, 314014687,
-342686898, -1037154958, -1606526823, -1903028272, -1832991948, -1383670599, -630453677, 277904833, 1152743920,
1809445506, 2110896781, 1999543607, 1510011487, 759250124, -83088008, -836304930, -1351646656, -1545760704,
-1416428721, -1037154958, -532784999, -43252879, 314491698, 476104793, 443288145, 277904833, 79002096
}, {
83088008, 277904833, 342686898, 139768215, -314491698, -836304930, -1152743920, -1037154958, -436269664,
476104793, 1351646656, 1809445506, 1606526823, 759250124, -443288145, -1545760704, -2110896781, -1903028272,
-990653814, 277904833, 1416428721, 1999543607, 1832991948, 1023470462, -79002096, -1037154958, -1510011487,
-1383670599, -795836990, -50329886, 532784999, 759250124, 630453677, 314014687, 36586865, -43252879
}, {
35846692, -107267261, -429419697, -596605174, -314491698, 379467971, 1066011120, 1207792529, 555204365,
-605899243, -1574025869, -1673302281, -728951191, 759250124, 1892189868, 1936987082, 814775745, -821024235,
-1982127844, -1967042654, -802326319, 783770706, 1832991948, 1759843851, 693104498, -651982862, -1462770171,
-1340381908, -500284046, 441556263, 916116723, 759250124, 247121954, -177871462, -258966078, -86541570
}, {
-89336498, -222379212, 20274314, 544629123, 759250124, 214621000, -779524439, -1296121036, -669913625,
731082434, 1689137820, 1223608269, -412283106, -1832991948, -1727342898, -91451522, 1689137820, 2046142226,
645146165, -1296121036, -2094584230, -1100438790, 759250124, 1859688915, 1335334105, -222379212, -1404396290,
-1286892101, -170637571, 850701647, 968092773, 314491698, -346967017, -464358144, -170637571, 28167689
}, {
-20274314, 222379212, 412283106, -28167689, -759250124, -731082434, 346967017, 1296121036, 779524439,
-850701647, -1689137820, -544629123, 1404396290, 1832991948, 89336498, -1859688915, -1689137820, 464358144,
2094584230, 1296121036, -968092773, -2046142226, -759250124, 1286892101, 1727342898, 222379212, -1335334105,
-1223608269, 170637571, 1100438790, 669913625, -314491698, -645146165, -214621000, 170637571, 91451522
}, {
92870544, 107267261, -368751054, -512316477, 314491698, 983114341, 150606618, -1207792529, -883202600,
963846506, 1574025869, -236405037, -1888545077, -759250124, 1624860276, 1663328516, -814775745, -2127085184,
-280036077, 1967042654, 1276316860, -1246799142, -1832991948, 248631676, 1795674533, 651982862, -1256109222,
-1151012038, 500284046, 1143970843, 129429458, -759250124, -393114259, 282952635, 258966078, -12226639
}, {
4085911, -277904833, -100601247, 615873008, 314491698, -879557809, -619958920, 1037154958, 980159057,
-1069655911, -1351646656, 973140575, 1689614832, -759250124, -1953299633, 453782903, 2110896781, -93582766,
-2143397735, -277904833, 2046882399, 615873008, -1832991948, -879557809, 1527524726, 1037154958, -1167324589,
-1069655911, 795836990, 973140575, -457868814, -759250124, 194184013, 453782903, -36586865, -93582766
}, {
-93582766, 36586865, 453782903, -194184013, -759250124, 457868814, 973140575, -795836990, -1069655911,
1167324589, 1037154958, -1527524726, -879557809, 1832991948, 615873008, -2046882399, -277904833, 2143397735,
-93582766, -2110896781, 453782903, 1953299633, -759250124, -1689614832, 973140575, 1351646656, -1069655911,
-980159057, 1037154958, 619958920, -879557809, -314491698, 615873008, 100601247, -277904833, -4085911
}, {
12226639, 258966078, -282952635, -393114259, 759250124, 129429458, -1143970843, 500284046, 1151012038,
-1256109222, -651982862, 1795674533, -248631676, -1832991948, 1246799142, 1276316860, -1967042654, -280036077,
2127085184, -814775745, -1663328516, 1624860276, 759250124, -1888545077, 236405037, 1574025869, -963846506,
-883202600, 1207792529, 150606618, -983114341, 314491698, 512316477, -368751054, -107267261, 92870544
}, {
91451522, -170637571, -214621000, 645146165, -314491698, -669913625, 1100438790, -170637571, -1223608269,
1335334105, 222379212, -1727342898, 1286892101, 759250124, -2046142226, 968092773, 1296121036, -2094584230,
464358144, 1689137820, -1859688915, -89336498, 1832991948, -1404396290, -544629123, 1689137820, -850701647,
-779524439, 1296121036, -346967017, -731082434, 759250124, -28167689, -412283106, 222379212, 20274314
}, {
-28167689, -170637571, 464358144, -346967017, -314491698, 968092773, -850701647, -170637571, 1286892101,
-1404396290, 222379212, 1335334105, -1859688915, 759250124, 1100438790, -2094584230, 1296121036, 645146165,
-2046142226, 1689137820, 91451522, -1727342898, 1832991948, -412283106, -1223608269, 1689137820, -731082434,
-669913625, 1296121036, -779524439, -214621000, 759250124, -544629123, 20274314, 222379212, -89336498
}, {
-86541570, 258966078, -177871462, -247121954, 759250124, -916116723, 441556263, 500284046, -1340381908,
1462770171, -651982862, -693104498, 1759843851, -1832991948, 783770706, 802326319, -1967042654, 1982127844,
-821024235, -814775745, 1936987082, -1892189868, 759250124, 728951191, -1673302281, 1574025869, -605899243,
-555204365, 1207792529, -1066011120, 379467971, 314491698, -596605174, 429419697, -107267261, -35846692
}, {
43252879, 36586865, -314014687, 630453677, -759250124, 532784999, 50329886, -795836990, 1383670599,
-1510011487, 1037154958, -79002096, -1023470462, 1832991948, -1999543607, 1416428721, -277904833, -990653814,
1903028272, -2110896781, 1545760704, -443288145, -759250124, 1606526823, -1809445506, 1351646656, -476104793,
-436269664, 1037154958, -1152743920, 836304930, -314491698, -139768215, 342686898, -277904833, 83088008
}, {
79002096, -277904833, 443288145, -476104793, 314491698, 43252879, -532784999, 1037154958, -1416428721,
1545760704, -1351646656, 836304930, -83088008, -759250124, 1510011487, -1999543607, 2110896781, -1809445506,
1152743920, -277904833, -630453677, 1383670599, -1832991948, 1903028272, -1606526823, 1037154958, -342686898,
-314014687, 795836990, -1023470462, 990653814, -759250124, 436269664, -139768215, -36586865, 50329886
}, {
-57023852, 107267261, -60668643, -84288696, 314491698, -603646369, 915404502, -1207792529, 1438406965,
-1569745749, 1574025869, -1436897244, 1159593886, -759250124, 267329592, 273658566, -814775745, 1306060948,
-1702091766, 1967042654, -2078643179, 2030569848, -1832991948, 1511212175, -1102570034, 651982862, -206660948,
-189369869, 500284046, -702414579, 786687264, -759250124, 640236213, -460824098, 258966078, -74314931
}, {
-69062184, 222379212, -392008792, 572796813, -759250124, 945703435, -1126491457, 1296121036, -1449438064,
1581784081, -1689137820, 1768237392, -1816679397, 1832991948, -1816679397, 1768237392, -1689137820, 1581784081,
-1449438064, 1296121036, -1126491457, 945703435, -759250124, 572796813, -392008792, 222379212, -69062184,
-63283832, 170637571, -249737143, 298179147, -314491698, 298179147, -249737143, 170637571, -63283832
}
};