2024-09-14 15:57:00 +08:00
|
|
|
#ifndef GFP_HEADER_CUH
|
|
|
|
#define GFP_HEADER_CUH
|
|
|
|
|
|
|
|
#include "../header.cuh"
|
|
|
|
|
2024-09-14 16:15:13 +08:00
|
|
|
namespace gfp
|
|
|
|
{
|
|
|
|
using gfp_t = uint32_t;
|
2024-09-14 15:57:00 +08:00
|
|
|
|
2024-09-14 16:15:13 +08:00
|
|
|
static const gfp_t gfprime = 65521;
|
2024-09-14 15:57:00 +08:00
|
|
|
|
2024-09-14 16:15:13 +08:00
|
|
|
static const gfp_t gfp_zero = (gfp_t)0;
|
|
|
|
static const gfp_t gfp_one = (gfp_t)1;
|
|
|
|
static const gfp_t gfp_fullmask = (gfp_t)0xFF'FF;
|
2024-09-14 15:57:00 +08:00
|
|
|
|
2024-09-14 16:15:13 +08:00
|
|
|
__managed__ gfp_t gfp_inv_table[gfprime];
|
2024-09-14 15:57:00 +08:00
|
|
|
|
2024-09-14 16:15:13 +08:00
|
|
|
void init_inv_table()
|
|
|
|
{
|
|
|
|
gfp_inv_table[0] = 0;
|
|
|
|
gfp_inv_table[1] = 1;
|
|
|
|
for (int i = 2; i < gfprime; ++i)
|
|
|
|
gfp_inv_table[i] = (gfprime - gfprime / i) * gfp_inv_table[gfprime % i] % gfprime;
|
|
|
|
}
|
2024-09-14 15:57:00 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|