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

📄 pb_isirreduc.c

📁 多项式算法库,实现多项式算法,可以支持任意长度的多项式,主要用在密码学中,验证过,十分好用
💻 C
字号:
/* LibTomPoly, Polynomial Basis Math -- Tom St Denis  *  * LibTomPoly is a public domain library that provides * polynomial basis arithmetic support.  It relies on * LibTomMath for large integer support. * * This library is free for all purposes without any * express guarantee that it works. * * Tom St Denis, tomstdenis@iahu.ca, http://poly.libtomcrypt.org */#include <tompoly.h>/* is a(x) irreducible?  */int pb_isirreduc(pb_poly *a, int *res){   pb_poly u, tmp, fm, d;   int err, i;   /* default to no */   *res = MP_NO;   /* init temps */   if ((err = pb_init_multi(&(a->characteristic),        &u, &tmp, &fm, &d, NULL)) != MP_OKAY) {       return err;   }   /* fm = monic(a(x)) */   if ((err = pb_monic(a, &fm)) != MP_OKAY)                                   { goto _ERR; }     /* u  = x */   mp_set(&(u.terms[1]), 1); u.used = 2;   /* loop */   for (i = 1; i <= (a->used / 2); i++) {       /* u = u^p mod fm */       if ((err = pb_exptmod(&u, &(a->characteristic), &fm, &u)) != MP_OKAY)  { goto _ERR; }        /* tmp = u - x */       pb_zero(&tmp);       mp_set(&(tmp.terms[1]), 1); tmp.used = 2;       if ((err = pb_sub(&u, &tmp, &tmp)) != MP_OKAY)                         { goto _ERR; }       /* d = gcd(fm, tmp) */       if ((err = pb_gcd(&fm, &tmp, &d)) != MP_OKAY)                          { goto _ERR; }              /* if d != 1 then reducible */       if (d.used > 1)                                                        { err = MP_OKAY; goto _ERR; }   }      /* irreducible */   *res = MP_YES;   err  = MP_OKAY;_ERR: pb_clear_multi(&u, &tmp, &fm, &d, NULL);   return err;}

⌨️ 快捷键说明

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