#define MUL_FFT_MODF_THRESHOLD 480 #define SQR_FFT_MODF_THRESHOLD 480 #define MUL_FFT_TABLE2 {{1, 4 /*66*/}, {305, 5 /*95*/}, {321, 4 /*97*/}, {337, 5 /*95*/}, {353, 4 /*97*/}, {369, 5 /*96*/}, {801, 6 /*96*/}, {1281, 7 /*91*/}, {1409, 6 /*97*/}, {1601, 7 /*92*/}, {1921, 6 /*98*/}, {1985, 7 /*94*/}, {2689, 8 /*91*/}, {2817, 7 /*95*/}, {3201, 8 /*92*/}, {3329, 7 /*96*/}, {3457, 8 /*87*/}, {3841, 7 /*96*/}, {3969, 8 /*88*/}, {4865, 7 /*97*/}, {4993, 8 /*90*/}, {6913, 9 /*87*/}, {7681, 8 /*96*/}, {8961, 9 /*90*/}, {9729, 8 /*97*/}, {9985, 9 /*83*/}, {11777, 8 /*97*/}, {12033, 9 /*85*/}, {13825, 10 /*87*/}, {15361, 9 /*96*/}, {15873, 8 /*98*/}, {16129, 9 /*88*/}, {19969, 10 /*83*/}, {23553, 9 /*97*/}, {26113, 10 /*81*/}, {31745, 9 /*98*/}, {34305, 10 /*85*/}, {39937, 9 /*98*/}, {40449, 10 /*83*/}, {48129, 11 /*75*/}, {63489, 10 /*98*/}, {80897, 11 /*83*/}, {96257, 12 /*75*/}, {126977, 11 /*98*/}, {129025, 9 /*98*/}, {130561, 11 /*80*/}, {194561, 12 /*75*/}, {258049, 10 /*98*/}, {261121, 9 /*99*/}, {261633, 10 /*94*/}, {277505, 9 /*99*/}, {278017, 10 /*94*/}, {293889, 9 /*99*/}, {294401, 7 /*99*/}, {294529, 8 /*99*/}, {294657, 10 /*94*/}, {310273, 9 /*99*/}, {310785, 10 /*95*/}, {326657, 12 /*83*/}, {389121, 13 /*75*/}, {516097, 11 /*98*/}, {522241, 10 /*99*/}, {523265, 11 /*94*/}, {587777, 10 /*99*/}, {588801, 11 /*94*/}, {620545, 10 /*99*/}, {621569, 9 /*99*/}, {622081, 11 /*95*/}, {653313, 10 /*99*/}, {662529, 11 /*96*/}, {686081, 10 /*99*/}, {687105, 9 /*99*/}, {687617, 11 /*95*/}, {718849, 10 /*99*/}, {752641, 9 /*99*/}, {753153, 11 /*95*/}, {784385, 10 /*99*/}, {818177, 9 /*99*/}, {818689, 11 /*96*/}, {849921, 10 /*99*/}, {850945, 11 /*96*/}, {882689, 10 /*99*/}, {883713, 9 /*99*/}, {884225, 11 /*96*/}, {980993, 10 /*99*/}, {982017, 12 /*93*/}, {LONG_MAX, 0}} #define MUL_FFTM_TABLE2 {{1, 4 /*66*/}, {273, 5 /*94*/}, {289, 4 /*97*/}, {305, 5 /*95*/}, {609, 6 /*95*/}, {641, 5 /*97*/}, {673, 6 /*95*/}, {705, 5 /*97*/}, {737, 6 /*96*/}, {1473, 7 /*96*/}, {1537, 6 /*98*/}, {1601, 7 /*96*/}, {1665, 6 /*98*/}, {1729, 7 /*96*/}, {2689, 8 /*91*/}, {2817, 7 /*97*/}, {2945, 8 /*92*/}, {3329, 7 /*98*/}, {3457, 8 /*93*/}, {5377, 9 /*91*/}, {5633, 8 /*95*/}, {6401, 9 /*92*/}, {6657, 8 /*96*/}, {6913, 9 /*87*/}, {7681, 8 /*96*/}, {7937, 9 /*88*/}, {8705, 8 /*97*/}, {8961, 9 /*90*/}, {13825, 10 /*87*/}, {15361, 9 /*96*/}, {17921, 10 /*90*/}, {19457, 9 /*97*/}, {19969, 10 /*83*/}, {23553, 9 /*97*/}, {24065, 10 /*85*/}, {27649, 11 /*87*/}, {30721, 10 /*96*/}, {31745, 9 /*98*/}, {32257, 10 /*88*/}, {39937, 11 /*83*/}, {47105, 10 /*97*/}, {48129, 12 /*75*/}, {61441, 11 /*96*/}, {63489, 10 /*98*/}, {68609, 11 /*85*/}, {79873, 10 /*98*/}, {80897, 11 /*83*/}, {96257, 12 /*75*/}, {126977, 11 /*98*/}, {161793, 12 /*83*/}, {192513, 13 /*75*/}, {253953, 12 /*98*/}, {258049, 10 /*98*/}, {261121, 9 /*99*/}, {261633, 10 /*94*/}, {277505, 12 /*85*/}, {323585, 10 /*99*/}, {326657, 9 /*99*/}, {327169, 10 /*95*/}, {330753, 12 /*84*/}, {389121, 10 /*99*/}, {392193, 9 /*99*/}, {392705, 10 /*96*/}, {408577, 9 /*99*/}, {409089, 8 /*99*/}, {409345, 10 /*96*/}, {412673, 12 /*90*/}, {454657, 13 /*87*/}, {516097, 11 /*98*/}, {522241, 10 /*99*/}, {523265, 11 /*94*/}, {555009, 10 /*99*/}, {556033, 9 /*99*/}, {556545, 11 /*94*/}, {587777, 10 /*99*/}, {588801, 11 /*94*/}, {620545, 10 /*99*/}, {621569, 9 /*99*/}, {622081, 11 /*95*/}, {653313, 10 /*99*/}, {654337, 11 /*95*/}, {686081, 13 /*87*/}, {778241, 11 /*99*/}, {817153, 10 /*99*/}, {818177, 9 /*99*/}, {818689, 11 /*96*/}, {849921, 10 /*99*/}, {850945, 11 /*96*/}, {882689, 10 /*99*/}, {883713, 9 /*99*/}, {884225, 11 /*96*/}, {915457, 12 /*93*/}, {978945, 14 /*93*/}, {LONG_MAX, 0}} #define MUL_FFT_FULL_TABLE2 {{100, 2}, {216, 1}, {256, 2}, {264, 1}, {304, 2}, {312, 1}, {544, 4}, {560, 1}, {704, 2}, {720, 1}, {896, 2}, {960, 7}, {40960, 2}, {47616, 1}, {49152, 6}, {53760, 4}, {56320, 1}, {64512, 4}, {71680, 5}, {86016, 2}, {96768, 4}, {99840, 1}, {131072, 6}, {136192, 7}, {147456, 6}, {150528, 4}, {161280, 1}, {161792, 3}, {172032, 2}, {193536, 1}, {259072, 6}, {286720, 7}, {294912, 6}, {301056, 4}, {322560, 3}, {344064, 2}, {387072, 1}, {393216, 4}, {404480, 3}, {409600, 1}, {417792, 3}, {425984, 1}, {524288, 6}, {530432, 7}, {557056, 6}, {566272, 5}, {577536, 4}, {593920, 6}, {602112, 5}, {614400, 4}, {645120, 3}, {647168, 4}, {652800, 1}, {654336, 6}, {673792, 3}, {688128, 2}, {724992, 4}, {727040, 1}, {753664, 2}, {783360, 4}, {816640, 6}, {831488, 1}, {851968, 2}, {860160, 3}, {868352, 2}, {881664, 7}, {884736, 1}, {921600, 7}, {950272, 1}, {LONG_MAX, 1}}