IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++数论库:NTL -> 正文阅读

[C++知识库]C++数论库:NTL

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 ≤ 0 n \le 0 n0 那么 x = 0 x=0 x=0

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

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

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

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

ZZ_p::init(p):初始化环 Z p Z_p Zp?

ZZ_p a(2):初始化为 2 m o d ?? p 2 \mod p 2modp,这里参数类型是long

random(a):随机生成 Z p Z_p Zp?中元素

ZZ_pX m Z p [ x ] Z_p[x] Zp?[x]中的多项式,记录为向量 Z p n Z_p^n Zpn?

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

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

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

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

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

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

h = sqr(g) % f:计算 h ≡ g 2 m o d ?? f h \equiv g^2 \mod f hg2modf

  • G F ( p d ) [ x ] / ( x n ? 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_p
    ZZ_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 - 1
	SetCoeff(f, 8); //将 x^8 系数置为 1
    SetCoeff(f, 0, -1); //将 x^0 系数置为 -1

    //随机生成5次多项式
	random(g, 5);

    // 环上多项式的运算:h = g^2 mod f
	h = 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++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:34:44  更:2021-12-02 16:36:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:24:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码