C++
文章平均质量分 68
元解~殇怀
这个作者很懒,什么都没留下…
展开
-
NTL密码算法开源库拓展——SM2算法
2021SC@SDUSCNTL密码算法开源库拓展——SM2算法概述国密算法SM2加密解密代码实现概述本部分给出了SM2椭圆曲线公钥密码算法涉及的必要数学基础知识与相关密码技术,以帮助实现其它各部分所规定的密码机制。本部分适用于基域为素域和二元扩域的椭圆曲线公钥密码算法。国密算法SM2加密解密代码实现封装加密、解密接口:加密接口: Encrpt_SM2()解密接口:Decrypt_SM2()加密解密结果可以和nodejs的模块sm-crypto互相加密解密#ifdef __cplusp原创 2021-12-19 23:47:51 · 436 阅读 · 0 评论 -
NTL密码算法开源库——大整数上多项式(ZZX,GF2X)
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) >原创 2021-11-16 19:00:49 · 528 阅读 · 0 评论 -
NTL密码算法开源库-大整数ZZ类(二)
NTL密码算法开源库-大整数ZZ类(二)素数检测Miller-Rabin素数测试素数检测(1)数学基础:费马小定理,二次探测定理,欧拉定理,Miller-Rabin素数测试,同余式,wilson定理,乘法逆元,简化剩余系(具体见@回首~阑珊)Miller-Rabin素数测试Miller和Rabin两个人的工作让Fermat素性测试迈出了革命性的一步,建立了Miller-Rabin素性测试算法。新的测试基于下面的定理:如果p是素数,x是小于p的正整数,且,那么要么x=1,要么x=p-1。这是显然原创 2021-10-16 19:59:01 · 430 阅读 · 0 评论 -
NTL密码算法开源库-大整数ZZ类(一)
NTL密码算法开源库-大整数ZZ类(一)本章综述代码分析贝祖公式本章综述大整数ZZ类主要实现了任意长度大整数表示、最大公因数、Jacobi符号和素性检验。笔者将通过逐个分析ZZ.cpp源代码中函数的形式来一步步向读者展示NTL是如何实现上述功能的。代码分析(1)判断输入的I/O是否合法:static NTL_CHEAP_THREAD_LOCAL long iodigits = 0;static NTL_CHEAP_THREAD_LOCAL long ioradix = 0; static v原创 2021-10-05 19:52:36 · 1578 阅读 · 0 评论 -
线性表的链式描述代码
线性表的链式描述代码#include <iostream>using namespace std;struct ListNode { int data; struct ListNode* next;};void createList(ListNode* head) { //构造新链表 ListNode* p = head; //为head赋予新指针 int n; cin >> n; p->data = n; //避免首结点值为空 while (1)原创 2020-11-02 19:11:31 · 90 阅读 · 0 评论 -
冒泡排序,插入排序,基数排序(三种)
冒泡排序,插入排序,基数排序(三种)//C++实现冒泡排序#include <iostream>using namespace std; void print(int* pData, int count){ for (int i = 0; i< count; i++) { cout << pData[i] << " "; } cout << endl;} void BubbleSort(int* pData, int coun原创 2020-11-01 09:01:34 · 100 阅读 · 0 评论 -
数据结构之栈---括号匹配问题(可厉害了)
数据结构之栈---括号匹配问题问题描述解决思路第一种实现办法第二种解决方法问题描述我们要做的是,对一个字符串的左右括号进行匹配。例如,字符串(a*(b+c)+d)这个字符串的括号就是匹配的,没有多余的左括号或右括号。这是数据结构中的一类很经典的问题。解决思路对于这个问题,思路上要正确。如果从左至右的扫描一个字符串,那么每一个右括号都和都与最近扫描的那个未匹配的左括号相匹配。这种观察结果促使我们在在从左至右的扫描的过程中,将扫描到的左括号都存在栈中,。每当扫描到一个右括号,就将它与栈顶的左括号相匹配原创 2020-10-03 18:12:00 · 558 阅读 · 0 评论 -
数据结构之数组和矩阵--矩阵&不规则二维数组
数据结构之数组和矩阵--矩阵&不规则二维数组不规则二维数组矩阵定义和操作类matrix操作不规则二维数组不规则二维数组的创建和使用#include<iostream>using namespace std;int main(){ int numberOfRows = 5; int length[5] = {6,3,4,2,7}; int **irregularArray = new int *[numberOfRows]; for(int i = 0;i<nu原创 2020-10-02 10:16:33 · 797 阅读 · 0 评论 -
数组和矩阵c++代码详解
这里写目录标题概述行主映射和列主映射概述行主映射列主映射三维数组的行主映射不规则二维数组概述在实际应用中,数据通常以表的形式出现。尽管用数组来描述表是最自然的方式,但是为了减少程序运行额时间,经常采用自定义的描述方式。例如。当表中大部分的数据为零的时候,就会用自定义的描述方式。本章首先检查了多维数组的行主描述方式和列主描述方式。这些描述方法把多维数组映射成一维数组。(这其中的内部逻辑是这样的:就是C++编译器在存贮多维数组的时候,内部实际上是通过行主变换,把多维数组转换成一个一维数组进行空间分配。但原创 2020-09-28 11:04:30 · 1067 阅读 · 0 评论 -
数据结构算法之基数排序(箱子排序的一种扩展)
数据结构算法之基数排序(箱子排序的一种扩展)综述步骤代码展示后记综述关于基数排序是这样的:1.我们类比箱子排序,基数排序就是对一串数字的的个位,十位,百位…进行分别排序,再将最终的排序结果输出,从而完成对整个一串数字的排序。这里基数排序是为了解决箱子排序的一些弊端:就比如数字范围过大,但是一串数字的个数较少。这样我们在初始化箱子的时候会浪费大量的空间和时间。所以我们用基数排序来减少初始化箱子所花费的时间。2.因为每一个位上的数字是从0-9的所以我们对一个位数上的箱子进行初始化的时候,最多只需要初始化原创 2020-09-27 11:06:02 · 161 阅读 · 0 评论 -
数据结构之创建链表并对其初始化,然后进行箱子排序实例化教程
数据结构之创建链表并对其初始化,然后进行箱子排序实例化教程概述步骤一步骤二步骤三关于循环链表概述本次我们讨论一下如何创建并初始化一个链表,然后对其中的元素进行箱子排序。步骤一第一步,我们进行前期的代码准备。构建一个结构体作为链表的节点。构建一个类,作为使用链表的接口。#include<iostream>using namespace std;template<class T>struct chainNode { T element; chainNode<原创 2020-09-24 19:06:21 · 432 阅读 · 0 评论 -
创建一个链表并对其初始化
创建一个链表并对其初始化如何创建一个链表并对其初始化如何创建一个链表并对其初始化#include<iostream>using namespace std;template<class T>struct chainNode { T element; chainNode<T>* next; chainNode(){ } chainNode(const T& element) {this->element = element;} ch原创 2020-09-22 20:08:36 · 802 阅读 · 0 评论 -
箱子排序(线性表-链式描述应用)
箱子排序(线性表-链式描述应用)概述步骤构建studentRecord结构体概述假定用一个线性表来保存一个班级的学生清单。节点数据有:学生姓名,社会保险号码,每次作业和考试分数,所有作业和考试总分的加权总分。假定分数是一个0-100的整数。我们要按总分你排序。我们采用一种更快的排序方法:箱子排序。这种方法首先把分数相同的节点放在同一个箱子里,然后把箱子连接起来得到一个有序的链表。步骤箱子排序需要做的是:1.逐个删除链表中的节点,把删除的节点分配带相应的箱子里2.把每一个箱子中收集的链表并连接起来原创 2020-09-22 13:25:50 · 235 阅读 · 0 评论 -
数据结构之线性表--链式描述
线性表--链式描述概述单向链表描述结构chainNode类chain构造函数和赋值构造函数析构函数方法get方法indexOf方法erase方法insert输出链表循环链表和头结点双向链表后记概述在线性表的链式描述中,线性表的元素在内存中的位置是随机的。每个元素都有一个明确的指针或链(指针和链是一个意思)指向线性表的下一个元素的位置。单向链表描述在链式描述中,数据对象实例的每一个元素都用一个单元或节点来描述。节点不必是数据成员,因此不是用公式来确定元素的位置。取而代之的是,每一个节都明确包含另一个原创 2020-09-21 20:29:27 · 458 阅读 · 0 评论 -
数据结构之线性表——数组描述
数据结构之线性表——数组描述数据对象和数据结构数据对象数据结构线性表数据结构抽象数据类型数组描述描述变长一维数组类arrayList数据对象和数据结构数据对象数据对象是一组实例值,例如:boollean={false,true}digit={1,2,3,4,5,6,7,8,9}letter={A,B,C,D,E,F,G,H,I,…,Z}boollean,digit,letter这些都是数据对象,在每个数据对象中,比如在boollean中有true和false两个实例;而0,1,2,…,9是di原创 2020-09-18 10:28:55 · 862 阅读 · 0 评论 -
折半查找(二分法查找)
折半查找(二分法查找)我们在对一个有序数组中查找元素x,传统的顺序查找的时间复杂度对于有序数组中查找元素x来讲是过于缓慢的和耗时的,所以,我们充分利用有序数组的性质,开发出一种折半查找即二分法查找的程序来加提高查找程序运行的效率。与STL的算法binary_search非常类似,变量left和right分别表示搜索段的左右两个端点。开始的时候,在0~n-1之间进行查找,因此left 和right 的初始值分别为0和n-1。在查找过程中,保持不变的是:x是数组a[0,n-1]中的元素,当且仅当x是a[le原创 2020-09-17 07:45:13 · 205 阅读 · 0 评论 -
求递归排列的渐进复杂性
求递归排列的渐进复杂性1.先使用递归生成排列对一个数组,将数组中所有的元素的排列全部输出出来。下面展示递归生成排列的代码:下面展示一些 内联代码片。#include<iostream>#include<iterator>using namespace std;template <class T>void permutation(T list[],int k,int m){ if(k==m) { copy(list,list+m+1,ostre原创 2020-09-14 20:45:55 · 165 阅读 · 0 评论 -
最好、最坏和平均操作计数
最好,最坏和平均操作计数例一:顺序搜索在顺序搜索中,我们对数组按顺序进行搜索我们需要的数,要确定确定数x与数组元素之间的比较次数。我们自然地把n作为实例特征。可是比较次数不是由n唯一确定的。例如,如果n=100,而且x=a[0]那么只需要一次查找。而如果n不在数组中那么需要比较100次。所以最少比较1次,做多比较n次,这是我们查找成功的平均比较次数就是:[1+2+3+4+…+n-1+n]/n=[n+1]/2;例二:在有序数组中插入元素在有序数组中插入一个新元素,插入之后数组依然有序。例如在数组a原创 2020-09-14 19:20:03 · 221 阅读 · 0 评论 -
数据结构名次计算和排序算法
数据结构的一些算法1.名次计算以及排序1.名次计算以及排序给数组a[n]中的元素进行名次的计算。就比如a[]={2,1,4,7,5},计算完名次之后会出现r[]={2,1,3,5,4},每一个r中元素代表的是其在a数组中对应元素所排的名次。下面给出代码:#include<iostream>using namespace std;template<class T>void rank(T a[],int n,int r[]){ for(int i=0;i<n;i原创 2020-09-14 16:32:43 · 1749 阅读 · 1 评论 -
C++小程序:钟表的C++实现
C++小程序:钟表的C++实现项目要求设计一个小程序,让编译器实时输出显示当前的时间。设计思路要想用C++实现这样的一个程序,第一步获取时间,第二步是设计计时的方法,第三步是输出显示时间我们通过库函数<time.h>获取实时的时间,来初始化定义的时分秒变量;下面我们设计计时方法:让计算机每次执行代码语句前都停顿一秒,这样,就可以达到计时的目的;然后就是在每次的循环中将时间实时的显示出来(计算机每次执行的速度很快,可以忽略每次运行所占的时间导致的误差)代码准备设计时钟类首先我们知道原创 2020-08-13 20:36:50 · 4115 阅读 · 2 评论