⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbc_poly.h

📁 这是一个C的源代码
💻 H
字号:
//requires// * gmp.h// * field.h// * darray.h#ifndef __PBC_POLY_H__#define __PBC_POLY_H__//implements R[x] for a given ring R//also R[x]_{f(x)}struct poly_field_data_s {    field_ptr field;    fieldmap mapbase; //map element from underlying field to constant term};typedef struct poly_field_data_s poly_field_data_t[1];typedef struct poly_field_data_s *poly_field_data_ptr;//TODO: having this structure is unnecessary? what else could be needed besides coeff?struct poly_element_s {    darray_t coeff;};typedef struct poly_element_s poly_element_t[1];typedef struct poly_element_s *poly_element_ptr;struct polymod_field_data_s {    field_ptr field;    fieldmap mapbase;    int n; //degree of extension    element_t poly; //polynomial of degree n    element_t *xpwr; //holds x^n,...,x^{2n-2} mod poly};typedef struct polymod_field_data_s polymod_field_data_t[1];typedef struct polymod_field_data_s *polymod_field_data_ptr;static inline int poly_coeff_count(element_ptr e){    return ((poly_element_ptr) e->data)->coeff->count;}static inline int poly_degree(element_ptr e){    return poly_coeff_count(e) - 1;}static inline element_ptr poly_coeff(element_ptr e, int i){    return (element_ptr) ((poly_element_ptr) e->data)->coeff->item[i];}void poly_alloc(element_ptr e, int n);void poly_remove_leading_zeroes(element_ptr e);void poly_set_coeff(element_ptr e, element_ptr a, int n);void poly_setx(element_ptr f);void poly_const_mul(element_ptr res, element_ptr a, element_ptr poly);void poly_div(element_ptr quot, element_ptr rem,	element_ptr a, element_ptr b);void field_init_poly(field_ptr f, field_ptr base_field);void field_init_polymod(field_ptr f, element_ptr poly);void trial_divide(darray_ptr factor, darray_ptr mult, mpz_t n, mpz_ptr limit);static inline field_ptr poly_base_field(element_t f){    return ((poly_field_data_ptr) f->field->data)->field;}void poly_gcd(element_ptr d, element_ptr f, element_ptr g);int poly_is_irred(element_ptr f);void poly_invert(element_ptr res, element_ptr f, element_ptr m);void poly_random_monic(element_ptr f, int deg);void poly_make_monic(element_t f, element_t g);void element_field_to_poly(element_t poly, element_t constant);void element_polymod_to_poly(element_ptr f, element_ptr e);void element_field_to_polymod(element_ptr f, element_ptr a);void element_poly_to_polymod_truncate(element_ptr f, element_ptr e);element_ptr polymod_coeff(element_ptr e, int i);void polymod_const_mul(element_ptr res, element_ptr a, element_ptr e);int polymod_field_degree(field_t f);#endif //__PBC_POLY_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -