NTL

官网:https://libntl.org/doc/tour.html

NTL is a high-performance, portable C++ library providing data structures and algorithms for arbitrary length integers; for vectors, matrices, and polynomials over the integers and over finite fields; and for arbitrary precision floating point arithmetic.

NTL provides high quality implementations of state-of-the-art algorithms for:

  • arbitrary length integer arithmetic and arbitrary precision floating point arithmetic;
  • polynomial arithmetic over the integers and finite fields including basic arithmetic, polynomial factorization, irreducibility testing, computation of minimal polynomials, traces, norms, and more;
  • lattice basis reduction, including very robust and fast implementations of Schnorr-Euchner, block Korkin-Zolotarev reduction, and the new Schnorr-Horner pruning heuristic for block Korkin-Zolotarev;
  • basic linear algebra over the integers, finite fields, and arbitrary precision floating point numbers.

类型介绍

The basic ring classes are:

  • ZZ: big integers
  • ZZ_p: big integers modulo p
  • zz_p: integers mod “single precision” p
  • GF2: integers mod 2
  • ZZX: univariate polynomials over ZZ
  • ZZ_pX: univariate polynomials over ZZ_p
  • zz_pX: univariate polynomials over zz_p
  • GF2X: polynomials over GF2
  • ZZ_pE: ring/field extension over ZZ_p
  • zz_pE: ring/field extension over zz_p
  • GF2E: ring/field extension over GF2
  • ZZ_pEX: univariate polynomials over ZZ_pE
  • zz_pEX: univariate polynomials over zz_pE
  • GF2EX: univariate polynomials over GF2E

使用

  • 常用函数

SetSeed(const ZZ& s):设置PRF种子

RandomBnd(ZZ& x, const ZZ& n):x∈{0,1,⋯n−1}x \in \{0,1,\cdots n-1\}x∈{0,1,⋯n−1},如果 n≤0n \le 0n≤0 那么 x=0x=0x=0

RandomBits(ZZ& x, long l):随机生成lll比特的整数

ZZ p(17):初始化整数为17,这里参数类型是long

p = to_ZZ("123"):读入字符串,可输入大整数

GenPrime(p, 8):随机生成8比特素数

ZZ_p::init(p):初始化环ZpZ_pZp​

ZZ_p a(2):初始化为 2modp2 \mod p2modp,这里参数类型是long

random(a):随机生成ZpZ_pZp​中元素

ZZ_pX m:Zp[x]Z_p[x]Zp​[x]中的多项式,记录为向量ZpnZ_p^nZpn​

SetCoeff(m, 5):将x5x^5x5系数置为 1

m[0]=1:将x0x^0x0系数置为 1

BuildIrred(m, 3):随机生成3次不可约多项式

ZZ_pE::init(m):初始化环Zp[x]/(m(x))Z_p[x]/(m(x))Zp​[x]/(m(x)),若ppp是素数且m(x)m(x)m(x)是d次不可约多项式,那么它同构于有限域GF(pd)GF(p^d)GF(pd)

ZZ_pEX f, g, h:GF(pd)[x]GF(p^d)[x]GF(pd)[x]上的多项式,记录为向量GF(pd)nGF(p^d)^nGF(pd)n

random(f, 5):随机生成5次多项式

h = sqr(g) % f:计算h≡g2modfh \equiv g^2 \mod fh≡g2modf

  • 环GF(pd)[x]/(xn−1)GF(p^d)[x]/(x^n-1)GF(pd)[x]/(xn−1)上多项式运算:
#include <iostream>#include <NTL/ZZ_p.h> // integers mod p
#include <NTL/ZZ_pX.h> // polynomials over ZZ_p
#include <NTL/ZZ_pE.h> // ring/field extension of ZZ_p
#include <NTL/ZZ_pEX.h> // polynomials over ZZ_pE
#include <NTL/ZZ_pXFactoring.h>
#include <NTL/ZZ_pEXFactoring.h>using namespace std;
using namespace NTL;#pragma comment(lib, "NTL")int main()
{ZZ p(17); //初始化为17//群Z_pZZ_p::init(p); //随机生成Z_p[x]中的d次不可约多项式int d = 4;ZZ_pX m;BuildIrred(m, d); //域GF(p^d) = Z_p[x]/m(x)ZZ_pE::init(m); //GF(p^d)[x]中的多项式ZZ_pEX f, g, h; // f(x) = x^8 - 1SetCoeff(f, 8); //将 x^8 系数置为 1SetCoeff(f, 0, -1); //将 x^0 系数置为 -1//随机生成5次多项式random(g, 5);// 环上多项式的运算:h = g^2 mod fh = sqr(g) % f; cout << "p = " << p << endl;cout << "d = " << d << endl;cout << "m(x) = " << m << endl;cout << "f = " << f << endl;cout << "g = " << g << endl;cout << "h = " << h << endl;return 0;
}

C++数论库:NTL相关推荐

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

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

  2. NTL:密码数论库--安装与使用

    一.引言 本文将对NTL开源库进行分析与学习. NTL:是一个高性能.可移植的C++库,为任意长度的整数提供数据结构和算法:用于整数和有限域上的向量.矩阵和多项式:以及任意精度的浮点运算. NTL 为 ...

  3. NTL库在Win上基于MinGW的安装

    NTL库是C++数论库. https://libntl.org/ 一.安装MinGW 下载MinGW安装器MinGW-get-setup 根据需求选择安装的包(一定要装msys和gmp) 二.安装NT ...

  4. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

  5. 常用的AI人工智能算法库

    1. Libnabo libnabo 是一个快速为低维度空间提供K最近邻居算法库.它提供了一个干净的,传统的无标量类型无关的C ++模板API. 示例代码: #include "nabo/n ...

  6. Crypto之RSA(一)

    最近在学习CTF中Crypto,整理一些关于RSA的知识点,以及在以往比赛中出现的题目. 完美的密码技术因为有不完美的人类参与而无法实现完美的安全性. 简单介绍RSA RSA是1977年由 罗纳德·李 ...

  7. Windows API参考大全

    第一章 Win32 API概论 1.1为什么使用 Wu32 API 在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API 函数.这些函数在程序员手中犹如" ...

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

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

  9. 【图文并茂】DEV配置NTL库

    一开始根据陈老师的博客:再说如何在DEV C++中搭建NTL库 后来发现自己虽然跟着一步一步来做,还是做错了很多回. 究竟怎么一回事呢?后来我发现一个致命的错误很容易忽视,所以我就重新写一篇博客. 来 ...

最新文章

  1. asp 设置table 间距_B端后台表格(table)如何设计
  2. 【Android 修炼手册】常用技术篇 -- Android 自定义 View
  3. 4.数据库(增删改查)备份及恢复
  4. matlab7.0安装说明
  5. 日期格式化时注解@DateTimeFormat无效的问题分析
  6. 人脸关键点: Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks
  7. Qt总结之十七:QByteArray类型里含中文的数据解析出现乱码
  8. python numpy 索引_Python numpy中布尔索引的问题。
  9. Gephi 入门使用
  10. 如何解决手机电话本CSV格式和VCF格式的转换
  11. Axure RP8手机边框
  12. Word多级列表不显示和奇数页显示章节标题问题
  13. 新世纪10年100个好东西
  14. 教育知识与能力-第一章教育基础知识和基本原理
  15. 好嗨呦 之 快速部署 Spring Boot 项目
  16. 转:瓦片地图TiledMap
  17. 【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
  18. 前端4-2-5:关于CSS 长度单位总结,有你就够了!
  19. 【Android】设计和实现一个BMI计算程序
  20. 思科网络安全 第五章测验答案

热门文章

  1. 台达PLC伺服追剪程序,电子凸轮,全部源代码,PLC程序和触 摸屏程序,DVP15MC。
  2. Win11添加日语输入法的教程
  3. 查询课程数mysql_mysql_数据查询练习
  4. 1.1.1 操作系统的层次结构、基本概念、功能和目标
  5. 《Java-第十一章》之图书管理系统
  6. 文献(5): 单细胞转录组揭示人类纤维化皮肤病中成纤维细胞的异质性
  7. 3. 站在使用层面,Bean Validation这些标准接口你需要烂熟于胸
  8. bzoj1921: [Ctsc2010]珠宝商
  9. pack与aligned的区别
  10. chrome无法访问商店,打不开网页怎么办,五步轻松解决