![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码
文章平均质量分 67
山登绝顶我为峰 3(^v^)3
只有平凡理想的域(✪ω✪)
展开
-
Linux 程序打包
假设编译了一个cmd可执行文件,想要把它交给其他人运行。原创 2024-07-02 10:10:48 · 410 阅读 · 0 评论 -
HElib 使用样例
文件 `./.cscode/tasks.json`(用于代码编译),在 `"args"` 中配置:头文件目录 `-I`、库文件目录 `-L`、链接的库 `-lhelib -lntl -lgmp -lgf2x -lssl -lstdc++ -lm`(注意 `gcc` 遵循 “从左到右” 编译顺序,**依赖其他库的库应当放在前面,被依赖的库必须放在后面**,否则依旧会出现 `undefined reference to` 报错,不过 `cmake` 似乎会自动重排)原创 2024-06-03 21:05:27 · 810 阅读 · 1 评论 -
OpenFHE 使用样例
BGV 方案使用 LSD 纠错码,**需要模切换**。在 `Ciphertext` 密文中,`GetScalingFactorInt()` 记录了**扭曲因子**,`GetLevel()` 记录了**乘法深度**,`GetNoiseScaleDeg()` 记录了**扭曲因子的指数**,`GetElements().size()` 是密文中环元素向量的长度。对于 `PackedPlaintext` 打包,明文模数必须是**满足 NTT 的大素数**,槽旋转对应的自同构指标由 `5 mo原创 2024-06-02 17:58:04 · 1090 阅读 · 0 评论 -
OpenFHE 源码解析:PKE 部分
OpenFHE原创 2024-05-30 17:33:41 · 644 阅读 · 0 评论 -
OpenFHE 源码解析:BinFHE 部分
OpenFHE 源码解析原创 2024-05-29 20:41:54 · 1047 阅读 · 0 评论 -
Python:柱状-折线图
柱状-折线图:双轴、带数据标签原创 2024-03-21 22:14:19 · 178 阅读 · 0 评论 -
用于 C/C++ Debug 的宏函数
【代码】用于打印 Debug 信息的小工具原创 2024-01-26 17:55:08 · 655 阅读 · 0 评论 -
HElib:编译安装
安装 HElib 同态加密库原创 2024-01-07 21:47:19 · 1220 阅读 · 0 评论 -
安装 GMP、NTL、CTMalloc ,编译 OpenFHE
首先安装 GMP、NTL、CTMalloc 等等很有用的三方库,然后编译 OpenFHE 工具包。原创 2023-10-29 15:03:21 · 687 阅读 · 4 评论 -
Sage 常用指令
SageMath 在线文档:[https://doc.sagemath.org/html/en/reference/index.html](https://doc.sagemath.org/html/en/reference/index.html)原创 2023-03-25 20:28:45 · 1375 阅读 · 0 评论 -
LWE 评估器
**作者**:Martin Albrecht、Léo Ducas 等人**源码**:https://github.com/malb/lattice-estimator**文档**:https://lattice-estimator.readthedocs.io/en/latest/readme_link.html#原创 2023-03-26 16:36:18 · 707 阅读 · 0 评论 -
如何用 GCC, CMake 和 Make 编译C/C++代码
1. 我们结合两者优点,先使用 VS 的 `CMake 项目` 来编程,然后用 `gcc` 编译得到在各个平台通用的代码。但是 `gcc` 编译时,需要对各个文件进行排序,否则容易链接失败。2. 可以使用 `make` 工具,根据 `Makefile` 文件指定编译配置。不过,编写 `MakeFile` 也是一件体力活。3. 进一步,我们使用 `CMake` 工具,根据 `CMakeLists.txt` 文件来生成 `MakeFile` 文件。4. 注意,我们的编译是在 Linux 上进行的,在 WSL原创 2023-03-09 22:38:54 · 1208 阅读 · 0 评论 -
C/C++ 测量 CPU 时钟周期
【代码】C/C++ 测量 CPU 时钟周期。原创 2023-02-25 13:29:36 · 1130 阅读 · 0 评论 -
Intel SIMD: AVX2
AVX 向量寄存器有三种:1. 128-bit (XMM forms),`AVX2` 支持,符号 `__m128`, `__m128d`, `__m128i`2. 256-bit (YMM forms),`AVX2` 支持,符号 `__m256`, `__m256d`, `__m256i`4. 512-bit 的向量寄存器,`AVX2` 不支持,这需要 `AVX-512` 架构**YMM 实际上是两个 XMM,在运算时会分成 2 个 128 bits 的区域**。YMM 支持 `16x16,原创 2023-02-22 11:11:32 · 1686 阅读 · 0 评论 -
并行计算(MPI + OpenMP)
Message Passing Interface(MPI):一种基于信息传递的并行编程技术,定义了一组具有可移植性的编程接口标准(并非一种语言或者接口)。支持点对点通信和广播。MPI 的目标是高性能、大规模性、可移植性,在今天仍为高性能计算的主要模型。OpenMPI 函数库,微软 MPI 文档程序结构(C语言版)编译:运行:数据类型MPI 数据类型C语言数据类型MPI_INTintMPI_FLOATfloatMP原创 2022-12-21 23:22:53 · 5041 阅读 · 0 评论 -
CUDA 编程简介(下)
另外,如果 warp 里的线程同时读取同一个数据,使用 broadcast 机制,也可以在。如果需要大量数据,这种一次次的数据调度会特别慢。在使用异步预取进行了一系列重构之后,您应该看到内存传输次数减少了,但是每次传输的量增加了,并且内核执行时间大大减少了。不过,在 CUDA 的云平台上,不同的非默认 stream 上,它们还是串行执行的。不过,在 CUDA 的云平台上,不同的非默认 stream 上,它们还是串行执行的。现在的 GPU 的一次性调度的内存块大小也变大了,足够支持一个 warp 内的。原创 2022-12-13 18:33:30 · 1095 阅读 · 0 评论 -
NTL_FFT
FFT.h / FFT.cppclass FFTPrimeInfolong q:素数qinv:倒数,1/double(q)Vec<long> RootTable[2]w是2k2^k2k次本原单位根,恰好整除2k∥q−12^k \| q-12k∥q−1RootTable[0][j]:记录w2k−jmod qw^{2^{k-j}}\mod qw2k−jmodqRootTable[1][j]:记录1/w2k−jmod q1/w^{2^{k-j}} \mod原创 2021-12-05 20:30:41 · 229 阅读 · 0 评论 -
C++数论库:NTL
NTL官网:https://libntl.org/doc/tour.htmlNTL 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 arbitra原创 2021-12-01 22:03:02 · 3565 阅读 · 0 评论 -
计算资源受限:指数log、对数exp 的实现
Shift-and-add algorithms计算对数为了计算logbx, x>1\log_bx,\, x>1logbx,x>1,我们可以预计算表格 (写在硬件上):Ak=logb(1+12k), k=0,1,⋯ ,n−1A_k = \log_b(1+\dfrac{1}{2^k}),\, k=0,1,\cdots,n-1Ak=logb(1+2k1),k=0,1,⋯,n−1然后可以做分解:logbx≈logb∏k=0n−1(1+12k)ak=∑k=0n−1ak原创 2021-11-25 20:21:34 · 690 阅读 · 0 评论 -
大数运算:Barrett And Montgomery
Barrett reductionBarrett Reduction,一种计算大数取模的算法。使用ZZ上的移位来代替RR上的浮点除法。当模数达到65536比特,运算速度是openssl.mod()openssl.mod()openssl.mod()的2倍。#include <iostream>#include <chrono>#include <random>#include <chrono>#include <NTL/ZZ.h&g原创 2021-11-20 14:33:03 · 2124 阅读 · 0 评论 -
CUDA 编程简介(上)
CPU 与 GPU 的硬件结构:可以看出,GPU 与 CPU 本质上没什么区别。仅仅是 GPU 的逻辑控制单元较为简单,并拥有大量的运算单元(共享内存的众核处理器)。GPU 除了图像处理,也可以做科学计算,然而 GPU 的 API 特别难用。CUDA(Compute Unified Device Architecture)是一种简单的轻量级软件,方便人们在 GPU 上编程。CUDA 软件栈:下面,我们举例 Nvidia Tesla 架构,G80 型号。流多处理器(Streaming Multipr原创 2022-12-03 22:35:19 · 1157 阅读 · 0 评论 -
奇异值分解(SVD)与 主成分分析(PCA)
线性映射线性映射同构于矩阵乘。线性空间的一组基α=(α1,⋯ ,αn)\alpha=(\alpha_1, \cdots, \alpha_n)α=(α1,⋯,αn),一个点的坐标为x=(x1,⋯ ,xn)x=(x_1,\cdots,x_n)x=(x1,⋯,xn),那么点可以记做两者内积α⋅x=∑i=1nxiαi\alpha \cdot x = \sum_{i=1}^{n} x_i\alpha_iα⋅x=∑i=1nxiαi。注意,基不一定是向量,可以是任何线性无关的对象(比如,三角函数)。线性原创 2022-04-26 22:22:51 · 1009 阅读 · 0 评论 -
特殊卷积的多项式环 以及 Walsh变换
特殊卷积Convolution:hk=∑i+j=kmod naibjh_k = \sum_{i+j=k \mod n} a_i b_jhk=i+j=kmodn∑aibjXOR-Convolution:hk=∑i⊕j=kaibjh_k = \sum_{i \oplus j=k} a_i b_jhk=i⊕j=k∑aibjOR-Convolution:hk=∑i∨j=kaibjh_k = \sum_{i \vee j=k} a_i b_jhk=i∨j=k∑原创 2022-05-12 19:42:21 · 352 阅读 · 0 评论 -
学习Pandas
PandasPandas 库是一个免费、开源的第三方 Python 库,是 Python 数据分析必不可少的工具之一,它为 Python 数据分析提供了高性能,且易于使用的数据结构,即 Series 和 DataFrame。Pandas 库基于 Python NumPy 库开发而来,因此,它可以与 Python 的科学计算库配合使用。Pandas 提供了两种数据结构,分别是 Series(一维数组结构)与 DataFrame(二维数组结构),这两种数据结构极大地增强的了 Pandas 的数据分析能力。中原创 2022-04-25 21:58:39 · 1346 阅读 · 0 评论 -
python绘图
python代码import numpy as np #数据处理from matplotlib import pyplot as plt #绘图from scipy.interpolate import make_interp_spline #插值,用于平滑折线图##############################################################################plt.gcf().set_facecolor(np.ones(3) * 2原创 2022-04-20 15:50:56 · 1306 阅读 · 0 评论 -
c99和c++11相互调用
C99C语言的发展历史大致上分为三个阶段:Old Style C、C89和C99。Ken Thompson和Dennis Ritchie发明C语言时有很多语法和现在并不一样,但为了向后兼容性(Backward Compatibility), 这些语法仍然在C89和C99中保留下来了。C89是最早的C语言规范,1990年由ANSI(美国国家标准委员会)推出ANSI版本,后来被接纳为ISO国际标准(ISO/IEC 9899:1990),因而有时也称为C90。C89是目前最广泛采用的C语言标准,大多数编译器都完原创 2022-04-02 13:55:20 · 1952 阅读 · 0 评论 -
有限域上多项式乘法的快速实现
问题多项式环R=GF[pd][x]/(xn−1)R=GF[p^d][x]/(x^n-1)R=GF[pd][x]/(xn−1),其中有限域GF(pd)≅Zp[x]/(m(x))GF(p^d) \cong Z_p[x]/(m(x))GF(pd)≅Zp[x]/(m(x)),m(x)m(x)m(x)是ZpZ_pZp上ddd次不可约多项式。对于任意f,g∈Rf,g \in Rf,g∈R,如何快速计算f⋅gf\cdot gf⋅g?NTL代码#include <iostream>#include原创 2022-03-28 20:31:02 · 1636 阅读 · 3 评论 -
LLL算法的C++实现
下面是一些常用的小工具(自己编的,个人习惯,每个小项目前都加上它),包括:数据类型、计时器、异常检查、随机数生成、循环测试、打印换行符,等等。原创 2022-01-09 13:33:15 · 1120 阅读 · 4 评论 -
Openssl - 椭圆曲线
OpenSSL - ECec.h:唯一需要包含的头文件ec_lcl.h:结构体定义,EC_METHOD,EC_GROUP,EC_POINTec_lib.c:函数实现,包含 - 群的内存控制、群的读写、点的内存控制、点的读写、点加、倍点、多倍点、点的逆ec_mult.c:GF(p)GF(p)GF(p)上椭圆曲线的点乘ec2_mult.c:GF(2m)GF(2^m)GF(2m)上椭圆曲线的点乘ecp_smpl.c:平凡的算法ecp_mont.c:蒙特马利算法ecp_nist.c:NIST素数域原创 2021-12-27 21:33:17 · 877 阅读 · 5 评论 -
求解离散对数问题DLP - Pohlig Hellman算法
求解离散对数问题使用Pohlig Hellman算法求解DLP要用到Miller Rabin素性判定、pollard rho因子分解、CRT中国剩余定理。// 求解离散对数// Pohlig - Hellman 算法#include<iostream>#include<ctime>#include<random>#include<Windows.h>#include<stack>#include<cstdio>#原创 2021-12-27 10:36:16 · 1507 阅读 · 2 评论 -
素检测与因子分解
素检测与因子分解#include<stdio.h> //只能快速求解2^63以内的部分数。#include<string.h> //越界,答案错误;有些数据是真的不好判断,很慢。#include<stdlib.h> //有些大数如 1234567890987654321 判断极快。#include<time.h>#include<iostream>#include<algorithm>using namespace st原创 2021-12-26 23:40:53 · 117 阅读 · 0 评论 -
各种排序算法C++实现
各种排序算法#include<iostream>#include<random>#include<ctime>#include<string>#include<memory.h>#include<assert.h>using namespace std;void bubbleSort(int* arr, long size);void selectionSort(int* arr, long size);void原创 2021-12-26 23:28:36 · 343 阅读 · 0 评论 -
Elliptic Curve
素域上椭圆曲线E(Fp)E(F_p)E(Fp)的C++实现EC.hEC.hEC.h#pragma once#include <iostream>#include <NTL/ZZ.h> // integers#include <NTL/ZZ_p.h> // integers mod pusing namespace std;using namespace NTL;#pragma comment(lib, "NTL")typedef char原创 2021-12-19 18:39:57 · 2633 阅读 · 0 评论 -
循环展开测试
循环展开 Timer( for (int64 i = 0; i < 1000000; i++) { res = i; } ); Timer( for (int64 i = 0; i < 1000000; i+=2) { res = i; res = i+1; } ); Timer( for (int64 i = 0; i < 1000000; i += 4) { res = i; res = i + 1; res原创 2021-12-25 17:03:03 · 290 阅读 · 0 评论 -
中国剩余定理 - CRT and Garner’s Algorithm
中国剩余定理#include <iostream>#include <chrono>#include <random>#include <NTL/ZZ.h> //大整数#pragma comment(lib, "NTL")using namespace std;using namespace NTL;typedef long long int64;typedef unsigned int uint;typedef unsigned l原创 2021-12-26 23:07:51 · 774 阅读 · 0 评论