2021SC@SDUSC

大整数上多项式(ZZX,GF2X)

  • GF(2)域求两多项式的最大公因式
  • 扩展欧几里得求两多项式最大公因式

GF(2)域求两多项式的最大公因式

//在GF(2)域中求两多项式的最大公因式
//注意多项式是降幂排列的还是升幂排列的
//b(x) = x^2, a(x) = x^3 + x^2 + 1
//降幂排列表示
//b = [1 0 0];
// a = [1 0 1 1];
//升幂排列表示
b = [ 0 0 1];
a = [1 1 0 1];
while(sum(b) > 0)
t = b;
//注意!conv和deconb函数认为多项式按降幂排列
[q,r] =deconv(a,b);
b =mod(r,2);
ind =find(b,1,‘first’);
b =b(ind:end);
//而gfconv和gfdeconv等函数认为多项式按升幂排列
//例如[0 0 1]代表x^2
[quot,remd] = gfdeconv(a,b);
b = remd;
a = t;
end

扩展欧几里得求两多项式最大公因式

设多项式的系数按照幂次由高到低的顺序存于一维数组中,多项式的最高幂次存于一变量中。
辗转相除法求两多项式去除另一个多项式,然后将所得余式变成除式,原除式变为被除式。如此反复相除,直到余式为零,最后的除式即为最大公因式
代码:(1)

#include<stdio.h>
#define N 10
int main()
{float a[N+1],b[N+1],c[N+1];int i,j,n,m,k,flag;float x,y;printf("Please input the highest power of two polynomials(n,m):");scanf("%d,%d",&n,&m);printf("Please enter the coefficients of the terms of the polynomial(x) in order of power from high to low:\n");for(i=ni>=0;i--)scanf("%f",&a[i]);printf("请按幂次由高到低输入多项式B(x)各项的系数:\n");for(j=m;j>=0;j--)scanf("%f",&b[j]);if(n<m){for(i=n;i>=0;i--){c[i] = a[i];a[i] = b[i];b[i] = c[i];}for(i=n+1;i<=m;i++)a[i] = b[i];flag = n;n = m;m = flag;}flag = 1;while(flag){for(k=n-m;k>=0;k--){x = a[k+m]/b[m];for(j=m-1;j>=0;j--){y = a[k+j] - x * b[j];a[k+j] = (y<0.0005 && y>-0.0005)?0.0:y;}}for(i=m;i>=0;i--}c[i] = b[i];for(flag=0,i=m-1;i>=0;i--){if(a[i]!=0)flag = 1;b[i] = a[i];}for(i=m;i>=0;i--)a[i] = c[i];n = m--;}printf("这两个多项式的公因式是:");for(i=n;i>=0;i--)if(i!=0)printf("%4.1fx^%d+",a[i],i);elseprintf("%4.1f\n",a[i]);return 0;}

代码:(2)

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>using namespace std;
typedef long long LL;
const double eps = 1e-8;
const int MOD = 999983;
const int N = 55;struct Poly
{int n;LL a[N];
};Poly p[25];LL gcd(LL a,LL b)
{return b? gcd(b,a%b):a;
}Poly delete_zero(Poly x)
{int i,j;Poly tmp;for(i=0;i<x.n && x.a[i] == 0;i++);for(j=0;i<x.n;i++,j++) tmp.a[j] = x.a[i];tmp.n = j;return tmp;
}Poly poly_gcd(Poly x,Poly y)
{x = delete_zero(x);y = delete_zero(y);Poly yy = y,tmp;tmp.n = 0;int i=0;if(x.n == y.n){double k = x.a[0] / y.a[0];for(i=1;i<x.n;i++)if(fabs(x.a[i]*1.0 - k*y.a[i]) > eps) break;if(i == x.n) return y;}LL g = gcd(x.a[0],y.a[0]);LL tx = y.a[0] / g;LL ty = x.a[0] / g;for(i=0;i<x.n;i++){x.a[i] *= tx;x.a[i] %= MOD;}for(i=0;i<y.n;i++){y.a[i] *= ty;y.a[i] %= MOD;}if(x.n < y.n) swap(x,y);for(i=1;i<y.n;i++)tmp.a[i-1] = ((x.a[i] - y.a[i])%MOD + MOD)%MOD;for(;i<x.n;i++)tmp.a[i-1] = x.a[i];tmp.n = x.n - 1;tmp = delete_zero(tmp);if(tmp.n == 0) return yy;return poly_gcd(y,tmp);
}

具体数学原理见@回首~阑珊

NTL密码算法开源库——大整数上多项式(ZZX,GF2X)相关推荐

  1. NTL密码算法开源库-大整数ZZ类(三)

    2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(三) 中国剩余定理 一次同余式 乘法逆元 简化剩余的等价描述 二次同余式 雅可比符号 中国剩余定理 //中国剩余定理模板代码 typede ...

  2. NTL密码算法开源库-大整数ZZ类(一)

    2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(一) 本章综述 代码分析 贝祖公式 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过 ...

  3. NTL密码算法开源库——大整数ZZ类(四)

    2021SC@SDUSC RSA算法原理 密钥生成的步骤 第一步,随机选择两个不相等的质数p和q. 爱丽丝选择了61和53.(实际应用中,这两个质数越大,就越难破解.) 第二步,计算p和q的乘积n. ...

  4. NTL密码算法开源库——大整数ZZ类(一)

    2021SC@SDUSC 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过逐个分析ZZ.cpp源代码中函数的形式来一步步向读者展示NTL是如何实现 ...

  5. NTL密码算法开源库——大整数ZZ类(二)

    2021SC@SDUSC 素数检测 (1)数学基础:费马小定理,二次探测定理,欧拉定理,Miller-Rabin素数测试,同余式, wilson定理,乘法逆元,简化剩余系 费马小定理:若存在整数 a ...

  6. NTL密码算法开源库--综述

    2021SC@SDUSC NTL密码算法开源库--综述 项目综述 NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数.实数的计算数论与计算代数的高性能可移植c++库,提供了任意大整数.任意精 ...

  7. NTL密码算法开源库(数论库)代码分析项目--综述

    2021SC@SDUSC NTL密码算法开源库(数论库)代码分析项目--综述 项目综述 NTL开源代码库的安装和使用 NTL代码开源库主要解决的问题 项目分工以及核心代码的分配 项目综述 NTL算法库 ...

  8. 【NTL密码算法开源库-概述】

    NTL库基本数据类型 ZZ: big integers(支持不等式运算) ZZ_p: big integers modulo p zz_p: integers mod "single pre ...

  9. NTL密码算法开源库——模二整数上的矩阵(mat_GF2)

    2021SC@SDUSC 模二整数上的矩阵(mat_GF2) 矩阵运算 高斯消元 矩阵运算 具体代码 #include <NTL/matrix.h> #include <NTL/ve ...

最新文章

  1. 第49周星期二PD数据库逆向工程
  2. Android数据存储之文件存储(瞬时数据的存储与读取)项目已上传GitHub
  3. 主流虚拟化产品对比列表01
  4. 初窥Spring中的注释
  5. 使用C#发送Http 请求实现模拟登陆(以博客园为例)
  6. 68 SD配置-发票凭证配置-定义出具发票类型
  7. Linux Suspend过程【转】
  8. Echarts数据可视化dataZoom,开发全解+完美注释
  9. 看完微软大神写的 求平均值代码,我意识到自己还是 too young 了
  10. Codevs 1215 迷宫
  11. 【错误信息】Maximum call stack size exceeded
  12. leetcode#248 中心对称数 III
  13. meltdown linux检测,Linux操作系统已拥有自动化的Spectre/Meltdown检查器
  14. 当GUSD遇上STO,全球投资格局与资金流向生变? | 链塔智库
  15. vscode连接寒武纪开发容器
  16. #176 – Two Kinds of Templates(两种模板)
  17. 1.9 闭区间上连续函数的性质
  18. MySQL8.0登录提示caching_sha2_password问题解决方法
  19. 随笔日记2018 4.10 关于多选框
  20. ERNIE: Enhanced Language Representation with Informative Entities 论文研读

热门文章

  1. inception家族的发展史
  2. 明代养生专著《遵生八笺》
  3. 物流行业供应商协同管理平台供应商全生命周期管理,优化物流成本
  4. 7-21 查询水果价格
  5. security Alternative forms secuerity
  6. 上千万行,十几G源码,浏览器为什么这么“变态”?
  7. poj 2446 Chessboard#匈牙利算法#
  8. php网页源码物业管理系统mysql数据库web结构html布局计算机软件工程
  9. 寄存器地址映射+寄存器各位定义+中断号定义
  10. 名悦集团告诉你开车上路,汽车压线到底会罚款吗