CN111831252A - 一种超长位数加法的处理方法和计算机可读存储介质 - Google Patents
一种超长位数加法的处理方法和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111831252A CN111831252A CN202010618031.9A CN202010618031A CN111831252A CN 111831252 A CN111831252 A CN 111831252A CN 202010618031 A CN202010618031 A CN 202010618031A CN 111831252 A CN111831252 A CN 111831252A
- Authority
- CN
- China
- Prior art keywords
- super
- addition
- long
- level
- add
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/50—Adding; Subtracting
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及一种超长位数加法的处理方法,包括:S1、基于编码模式和计算进制基数对超长位数进行编码,以生成分层级的超长位数编码;S2、根据参与超长位数加法的超长位数的符号和所述超长位数生成的所述超长位数编码进行加法运算。本发明还涉及计算机可读存储介质。实施本发明的超长位数加法的处理方法和计算机可读存储介质,通过将一个超长位数N进行编码符号提取,然后通过计算编码层级和每个层级对应的层级基数,从而提供一种超过目前计算机能处理位数的超长位数的编码方法,并且进一步的提供了基于超长位数编码的加法计算方法,能够实现超快的超大数值的加法运算,从而适应大数据分析、处理、计算等大算力计算任务需要。
Description
技术领域
本发明涉及信息编码与计算领域,更具体地说,涉及一种超长位数加法的处理方法和计算机可读存储介质。
背景技术
大数运算,顾名思义,就是很大的数值的数进行一系列的运算。我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,这样的数值并没有超出计算机的表示范围,所以可以运算。但是当我们在实际的应用中进行大量的数据处理时,由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。
大数运算目前在信息安全、数字图像、大数据挖掘等领域应用比较广泛。目前,常用的大数算法有:模拟手算算法、快速傅里叶变换算法以及中国余数定理等,这些算法普遍存在效率低下问题。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种超长位数加法的处理方法和计算机可读存储介质,能够实现超快的超大数值的加法运算,从而适应大数据分析、处理、计算等大算力计算任务需要。
本发明解决其技术问题所采用的技术方案是:构造一种超长位数加法的处理方法,包括:
S1、基于编码模式和计算进制基数对超长位数进行编码,以生成分层级的超长位数编码;
S2、根据参与超长位数加法的超长位数的符号和根据超长位数生成的所述超长位数编码进行加法运算。
在本发明所述的超长位数加法的处理方法中,所述步骤S1进一步包括:
S11、采用多项式将十进制超长位数X=XtXt-1……X1表示成X=X1*(10)0+X2*(10)1+……+Xt*(10)t-1,t属于自然数,X的符号为X.bSign;
S12、遍历字符串XtXt-1…X1,对所述字符串中的每个字符进行二进制编码以获得编码字符串和第一层级基数;
S13、从所述编码字符串的首个非零字符开始遍历所述编码字符串,对所述编码字符串中的每个字符进行二进制编码以获得新生成的编码字符串和下一层级基数;对每次遍历获得的新生成的编码字符串进行二进制编码直至最后生成的字符串为空,且基于层数和每一层级基数生成所述分层级的超长位数编码。
在本发明所述的超长位数加法的处理方法中,所述步骤S12进一步包括:
S121、基于以下公式遍历字符串X=XtXt-1…X1,对所述字符串中的每个字符进行二进制编码以获得编码字符串和第一层级基数:
基于Xt→Xt/2n=α1,Xt%2n=β1,X→α1Xt-1…X1;
Xt-1+β1*10→(Xt-1+β1*10)/2n=α2,(Xt-1+β1*10)%2n=β2,X→α1α2Xt-2…X1;
……
X1+βγ-1*10→(X1+βγ-1*10)/2n=αγ,(X1+βγ-1*10)%2n=βγ,X→α1α2…αγ;
其中,编码字符串为α1α2…αγ,第一层级基数为=βγ,;n表示计算机能够计算的最大位数,%表示求余数,/表示求商,皆为整数运算。
在本发明所述的超长位数加法的处理方法中,所述步骤S13进一步包括:
S131、从所述编码字符串α1α2…αγ的首个非零字符开始,将α1α2…αγ作为X,执行所述步骤S121以获得新生成的字符串和下一层级基数;
S132、对新生成的字符串重复执行步骤S131直至最后生成的字符串为空;
S133、基于层数和每一层级基数生成所述分层级的超长位数编码X'=X′1*(2n)0+X'2*(2n)1+……+X'u*(2n)u-1,其中u表示层数,X′1,X'2,……,X'u为每一层的基数。
在本发明所述的超长位数加法的处理方法中,所述步骤S2进一步包括:
S21、基于参与超长位数加法的两个超长位数M和N生成所述分层级的超长位数编码M'和N',其中所述两个超长位数M和N的符号相同:
M'=M′1*(2n)0+M'2*(2n)1+……+M'u*(2n)u-1,u为超长位数M的层数,M′1,M'2,……,M'u为每一层的基数,
N'=N′1*(2n)0+N'2*(2n)1+……+N'v*(2n)v-1,v为超长位数N的层数;
S22、将所述分层级的超长位数编码M'和所述分层级的超长位数编码N'按照层级从低到高从右到左排列,计算每个层级的中间加法和,将每个中间加法和进行二进制编码以获得每一层级的进位数和加法结果数;
S23、并基于所述分层级的超长位数编码M'和N'的符号确定所述加法结果数的符号。
在本发明所述的超长位数加法的处理方法中,所述步骤S22进一步包括:
S221、将所述分层级的超长位数编码M'和所述分层级的超长位数编码N'按照层级从低到高从右到左排列以计算所述加法结果resAdd=[R1,R2,……,Rt,Rt+1]:
S222、对每一层级,基于所述层级中的编码数按照二进制展开求得该层级的中间加法和,基于所述中间加法和与2n的比较结果,计算该层级的进位数和加法结果数。
在本发明所述的超长位数加法的处理方法中,所述步骤S222进一步包括:
S2221、对于第一层级,进位数J0=0,计算所述第一层级的中间加法和add1=M′1+N′1+J0,比较所述中间加法和add1和2n,当add1<2n,则所述第一层级的加法结果数R1=add1,所述第一层级的进位数J1=0;当add1≥2n,则所述第一层级的加法结果数R1=add1%2n,所述第一层级的进位数J1=add1/2n;
S2222、对于第二层级到第t-1层级,重复执行所述步骤S2221以计算每个层级的加法结果数和进位数;
S2223、对于第t层级,计算所述第t层级的中间加法和addt=M'u+Nv'+Jt-1,将所述中间加法和addt与2n进行比较;当所述中间加法和addt大于2n,所述第t层级的进位数为Jt=addt/(2n)t,所述第t层级的加法结果数Rt=addt%(2n)t,下一层级的加法结果数Rt+1=Jt;否则所述第t层级的进位数为Jt=0,下一层级的加法结果数Rt+1=0,所述第t层级的加法结果数Rt=addt。
在本发明所述的超长位数加法的处理方法中,在所述步骤S23中,所述加法结果resAdd=[R1,R2,……,Rt,Rt+1],t属于自然数,0≤Rt<2n。
在本发明所述的超长位数加法的处理方法中,在所述步骤S2中,SDN控制器将运算任务并行分发到每个子节点,每个子节点分别计算(M′1+N′1),(M'2+N'2),……,(M'u+N'v),然后将计算结果返回到所述SDN控制器,所述SND控制器汇总获得所述加法结果resAdd=[R1,R2,……,Rt,Rt+1]。
本发明解决其技术问题采用的另一技术方案是,构造一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的超长位数加法的处理方法。
实施本发明的超长位数加法的处理方法和计算机可读存储介质,通过将一个超长位数N(一般超过264-1),进行编码符号提取,然后通过计算编码层级和每个层级对应的层级基数,从而提供一种超过目前计算机能处理位数的超长位数的编码方法,并且进一步的提供了基于超长位数编码的加法计算方法,能够实现超快的超大数值的加法运算,从而适应大数据分析、处理、计算等大算力计算任务需要。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明的超长位数加法的处理方法的第一优选实施例的流程图;
图2是本发明的超长位数加法的处理方法的加法计算过程的优选实施例的流程图;
图3是采用本发明的超长位数编码处理方法根据Shor算法进行因式分解的具体实施例的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的目的是提供一种适用于超长位数编码及快速加法计算过程,其能够在现有的计算机体系下即可完成复杂任务加法计算,其主要包含超过264-1的超长位数编码方式和加法计算过程,其计算的数据的位数可以的远远超过目前计算机能处理的位数,可以实现2n(n为自然数)进制的超长位数的编码,同时针对2n进制超长位数的编码。本发明通过定义不同的层级,从低层级向高层级进位,可以进行并行化计算,从而可以采用多个低计算能力的单节点并行扩展,空间换时间,实现超快的超大数值计算,满足未来大数据计算和信息处理的大算力需要。通过本发明的方法可以实现超长位数的指数级快速加法计算,适用于大数据分析、处理、计算等大算力计算任务需要。
如图1所示,本发明的超长位数加法的处理方法分为两个步骤。在步骤S1中,基于编码模式和计算进制基数对超长位数进行编码,以生成分层级的超长位数编码。该编码的数据结构包括:编码符号、编码层级个数、每层级对应的分级基数。所述编码符号主要采用true/false表示超长位数的“+”或“-”。编码层级是指一个超长位数能编码的分层数。计算进制基数是指每个层级的计算进制基数即若超长位数N按照2n(n为自然数)进制进行分级编码,则该分级计算进制基数为:0~2n-1中的某个数。在计算进制基数的计算过程中,可以采用软件定义网络(SDN)的机制,由SDN管控器通过用户智能定义的方式对每个分级中的计算进制基数进行定义,即该基数由软件定义网络机制根据计算任务及并行分发计算节点数灵活定义。所述SDN管控器是实现SDN机制的智能管理控制设备。
根据编码模式定义和计算进制基数定义,通过符号计算对每个参与计算的超长位数进行编码,生成可以采用并行计算的编码,提供超长位数计算支持,其具体计算过程如下:
超长位数X在十进制时为:X=XtXt-1……X1可以用多项式表示如下:
X=X1*(10)0+X2*(10)1+……+Xt*(10)t-1,t属于自然数,根据X的具体数值确定,X的符号:X.bSign,采用true/false表示超长位数的“+”或“-”
然后,将X按照2n(n为自然数)进制进行编码。编码过程将经过两个循环,大循环内嵌小循环,大循环遍历编码后的所有字符,小循环将大循环遍历的单个字符对2n作取整运算和求余运算。
大循环是指首先从先Xt遍历至X1将字符串中的所有字符循环一遍,进行二进制编码以获得编码字符串和第一层级基数。
所述获得编码字符串和第一层级基数可以叫做小循环,即将大循环提取出的单位数(Xt到X1)对2n作取整运算和求余运算,得到商和余数部分,余数部分与10的乘积与下一位字符的和作为下一次小循环开始运算的部分,累计得到的商作为新的大循环的字符串。不断重复该过程,直到字符串变为空字符串,循环结束。大循环的循环的次数为该超长位数的层数,一次大循环内嵌的小循环最后一次运算得到的余数结果是大数对应层数的基数。
定义α=[α1,α2,……,αk]为每次小循环的商,β=[β1,β2,……,βγ]为每次小循环的余数,u为大循环得次数,即所述分层级的超长位数编码后的层数,γ为一次大循环内的小循环的次数,βγ表示最后一次小循环得到的数,即对应层的基数,其中u,e,k,γ均属于自然数。具体过程如下:
第一次大循环遍历字符串X=XtXt-1…X1,对所述字符串中的每个字符进行二进制编码以获得编码字符串和第一层级基数:
第一次小循环:Xt→Xt/2n=α1,Xt%2n=β1,X→α1Xt-1…X1;
第二次小循环:
Xt-1+β1*10→(Xt-1+β1*10)/2n=α2,(Xt-1+β1*10)%2n=β2,X→α1α2Xt-2…X1;
……
第γ次小循环:
X1+βγ-1*10→(X1+βγ-1*10)/2n=αγ,(X1+βγ-1*10)%2n=βγ,X→α1α2…αγ;
第一次大循环完成,得到新的编码字符串:α1α2…αγ和第一层级基数X1'=βγ。
然后将新的编码字符串:α1α2…αγ作为下次大循环的遍历的字符串。第二次大循环从字符串α1α2…αγ的非0字符开始遍历,以获得新生成的编码字符串和下一层级基数,其具体过程跟小循环过程一致,以获得新生成的字符串和下一层级基数:
……
第u次大循环开始,小循环过程同上,直至最后生成的字符串为空,得到最高层为u,最高层基数为Xu'=βγ。u为编码后X'的层数,则编码后超长位数为:X'=[X′1,X'2,……,X'u],其中编码X'的符号为X'.bSign,层数为CX=u;X'u所代表的编码为0~2n-1中的某个数,得到超长位数编码X'。这样就基于层数和每一层级基数生成所述分层级的超长位数编码,展开如下:
X'=X′1*(2n)0+X'2*(2n)1+……+X'u*(2n)u-1,u属于自然数,X'的符号:X'.bSign。
在步骤S2中,根据参与超长位数加法的超长位数的符号和根据所述超长位数生成的所述超长位数编码进行加法运算。图2是本发明的超长位数加法的处理方法的加法计算过程的优选实施例的流程图。
如图2所示,首先在步骤S21中,基于参与超长位数加法的两个超长位数M和N生成所述分层级的超长位数编码M'和N',即两个超长位数M和N在十进制时用多项式表示如下:
M=M1*(10)0+M2*(10)1+……+Mi*(10)i-1,i属于自然数,M的符号:M.bSign;
N=N1*(10)0+N2*(10)1+……+Mj*(10)j-1,j属于自然数,N的符号:N.bSign。
然后,将M和N按照2n(n为自然数)进制进行编码,编码过程按照步骤S1中的示例进行编码。生成所述分层级的超长位数编码M'和N':
M'=M′1*(2n)0+M'2*(2n)1+……+M'u*(2n)u-1,u为超长位数M的层数,M′1,M'2,……,M'u为每一层的基数;M'的符号为M'.bSign,
N'=N′1*(2n)0+N'2*(2n)1+……+N'v*(2n)v-1,v为超长位数N的层数,N'的符号为N'.bSign。在本发明中,只对同符号的两个超长位数进行加法计算。
在具体计算过程中,首先可以对加法过程涉及的中间加法和、进位数、和加法结果数进行定义,并分别由add、R、J表示,其中下标u,v,t属于自然数,u代表M'的层数,v代表N'的层数。
add=[add1,add2,……,addt],addt为t层对应的中间加法和;
J=[J1,J2,……,Jt],Jt为t层对应的进位数;
resAdd=[R1,R2,……,Rt,Rt+1],Rt为t层的加法结果数。
在步骤S22中,将所述分层级的超长位数编码M'和所述分层级的超长位数编码N'按照层级从低到高从右到左排列,计算每个层级的中间加法和,将每个中间加法和进行二进制编码以获得每一层级的进位数和加法结果数。
根据编码由SDN管控器进行分布式并行排列和分发,两个数同一编码层级对应数据分发到同一个计算节点进行计算。根据编码对u=v的情况进行说明,如果u≠v,将较小数的高层级用0补齐,运算也是可以进行的。将超长位数编码M'和N'按照从低层级从右到左排列,M'和N'同一编码层级对应排列如下:
计算过程中,SDN管控器可以将运算任务动态并行分发到每个子节点,每个子节点分别并行计算(M′1+N′1),(M′2+N′2),……,(M′u+N′v)后得到(add1,J1),(add2,J2),……,(addt,Jt),然后SDN管控器将结果进行汇总计算得到最终的超长位数加法结果resAdd=[R1,R2,……,Rt,Rt+1]。
对第一层级进行计算。先计算add1=M′1+N′1,多项式可展开为:add1=M′1×(2n)0+N′1×(2n)0,计算过程还是按照2n编码进行。
然后将add1与2n比较大小:
若add1<2n,则R1=add1,进位数J1=0;
若add1≥2n,则R1=add1%2n,进位数J1=add1/2n;(%表示求余数,/表示求商,皆为整数运算)
第一层级的运算完成。
然后对第二层级进行计算。add2=M'2+N'2+J1,多项式可展开为:add2=M'2×(2n)1+N'2×(2n)1+J1×(2n)1,计算过程还是按照2n编码进行。
然后将add2与2n比较大小:
若add2<2n,则R2=add2,进位数J2=0;
若add2≥2n,则R2=add2%2n,进位数J2=add2/2n;(%表示求余数,/表示求商,皆为整数运算)
第二层级的运算完成。
同样地,对第三层级直到第t-1层级计算。
最后对第t层级计算,计算过程同样类似。同样先计算addt=M'u+N′v+Jt-1,多项式可展开为:addt=M′u×(2n)u-1+N′v×(2n)v-1+Jt-1×(2n)t-1,计算过程还是按照2n编码进行。
然后将addt与2n比较大小:
若addt<2n,则Rt=addt,进位数Jt=0,Rt+1=0;
若addt≥2n,则Rt=addt%(2n)t,进位数Jt=addt/(2n)t,Rt+1=Jt;(%表示求余数,/表示求商,皆为整数运算)
第t层级的运算完成。
然后,执行步骤S23,基于每一层级的加法结果数、每一层级的进位数确定加法结果,确定resAdd的符号,得到加法结果resAdd=[R1,R2,……,Rt,Rt+1](t属于自然数,0≤Rt<2n),符号为:resAdd.bSign。加法结果可以表示为:resAdd=R1*(2n)0+R2*(2n)1+……+Rt*(2n)t-1+Rt+1*(2n)t,t属于自然数;resAdd的符号:resAdd.bSign。
下面采用实施例说明两个超长位数的具体编码过程,将编码后两个超长位数进行加法计算,将加法过程进行示例。
实施例1:
确定两个需要编码的超长位数A和B:
A=120623479892889324486908;B=27801936763830785484783867。
如前所述,具体的编码过程如下:
将A,B字符串类型的变量中每一位字符,对216作取整运算和求余运算,得到商和余数,取得余数乘以10累积作为下个字符开始运算的部分,最后一次小循环取得余数作为对应层数的基数,不断重复该过程,直到字符串变为空字符串,循环结束。一次大循环(字符串中的所有字符循环一遍),余数结果即为超长位数层级对应的基数。
对字符串A=120623479892889324486908进行操作:
第一次大循环,遍历字符串:120623479892889324486908:
第一次小循环:1→1/216=0,reminder→1%216=1,
且120623479892889324486908→020623479892889324486908;
第二次小循环:2+1*10→12/216=0,reminder→12%216=12,
且020623479892889324486908→000623479892889324486908;
第三次小循环:0+12*10→120/216=0,reminder→12%216=120,
且000623479892889324486908→000623479892889324486908;
...
最后一次小循环,reminder=252。
第二次大循环,小循环同上,reminder=1480。
第三次大循环,小循环同上,reminder=65535。
第四次大循环,小循环同上,reminder=782。
第五次大循环,从字符串的非0字符开始遍历:
第一次小循环:同上。
...
最后一次小循环:6539→6539/216=0,reminder=6539%216=6539,字符串→0。
得到超长位数编码:A'=[252,1480,65535,782,6539];
所有循环结束,得到超长位数A共有5个层级,每个层级对应基数为:252,1480,65535,782,6539。
经过5次大循环字符串120623479892889324486908变为空字符串,即层级个数为5,对应超长位数结构中m_len=5。
至此,超长位数A转换完成,转换后的编码为:A'=[252,1480,65535,782,6539],符号为:A'.bSign=true。
该过程是可逆过程,即由超长位数结构中的层级个数、层级对应的基数可以得到相应的超长位数,可用多项式表示如下:
A'=252*(216)0+1480*(216)1+65535*(216)2+782*(216)3+6539(216)4。
综上,层级对应的基数类比于十进制中的个数、十位、百位、千位等。
同样地,对超长位数B进行同样操作:
第一次大循环,遍历字符串B=27801936763830785484783867:
第一次小循环:2→2/216=0,reminder→2%216=2,
且27801936763830785484783867→07801936763830785484783867;
第二次小循环:7+2*10→27/216=0,reminder→27%216=27,
且07801936763830785484783867→00801936763830785484783867;
第三次小循环:8+27*10→278/216=0,reminder→278%216=278,
且00801936763830785484783867→00001936763830785484783867;
...
最后一次小循环,reminder=251。
第二次大循环,小循环同上,reminder=148。
第三次大循环,小循环同上,reminder=535。
第四次大循环,小循环同上,reminder=782。
第五次大循环,小循环同上,reminder=65354。
第六次大循环,从字符串的非0字符开始遍历:
第一次小循环:同上。
...
最后一次小循环:22→22/216=0,reminder=22%216=22,字符串→0。
B'=[251,148,535,782,65354,22];
所有循环结束,得到超长位数B共有6个层级,每个层级对应基数为:251,148,535,782,65354,22。
经过6次大循环字符串27801936763830785484783867变为空字符串,即层级个数为6,对应超长位数结构中m_len=6。
至此,超长位数B转换完成,转换后的编码为:B'=[251,148,535,782,65354,22],符号为:B'.bSign=true。
该过程是可逆过程,即由超长位数结构中的层级个数、层级对应的基数可以得到相应的超长位数,可用多项式表示如下:
B'=251*(216)0+148*(216)1+535*(216)2+782*(216)3+65354*(216)4+22*(216)5。
综上,层级对应的基数类比于十进制中的个数、十位、百位、千位等。
至此,实施例两个超长位数的编码过程结束。
由于它们的符号都为“+”,因此A.bSign=true,B.bSign=true,resAdd.bSign=true。如前得到分层级的超长位数编码:
A'=[252,1480,65535,782,6539];
B'=[251,148,535,782,65354,22];
可用多项式将A'和B'表示如下:
A'=252×(216)0+1480×(216)1+65535×(216)2+782×(216)3+6539×(216)4
B'=251×(216)0+148×(216)1+535×(216)2+782×(216)3+65354×(216)4+22×(216)5
A'和B'的加法运算具体过程如下:
A=120623479892889324486908。
B=27801936763830785484783867。
以及它们的符号都为“+”,因此A.bSign=true,B.bSign=true,resD.bSign=true。
A'和B'的加法运算具体过程如下:
如前得到编码数:
A'=[252,1480,65535,782,6539];
B'=[251,148,535,782,65354,22];
可用多项式将A'和B'表示如下:
A'=252×(216)0+1480×(216)1+65535×(216)2+782×(216)3+6539×(216)4
B'=251×(216)0+148×(216)1+535×(216)2+782×(216)3+65354×(216)4+22×(216)5
A和B的加法运算具体过程如下:
最高位计算:
根据子步骤S235,由于23>>16=0,
因此,resAdd.bSign=true,resAdd.m_len=max(A.m_len,B.m_len)=6。
因此根据图1子步骤S24,得到加法结果:
resAdd.m_data[]=[503,1628,534,1565,6357,23]。
至此,超长位数的编码过程和加法计算过程示例完毕,实施例1结束。
本发明的超长位数加法的处理方法可以应用到超长位数的因式分解,超高维数矩阵计算、图像处理等计算场景。比如解决用shor算法求解超长位数因式分解过程中所需的超长位数编码和超长位数计算过程。所述用shor算法求解超长位数的因式分解过程是将一个超过264-1的超长位大合数N,通过超长位数编码后,SDN管控器根据本发明的超长位数加法的处理方法计算的层级总数,按照任务需求分发到不同的对应数量的分布式计算节点中,每个节点中的数据会超过264-1,按照超长位数的编码分级进制进行表示计算。在用shor算法对超长位大合数N进行分解的过程中,SDN管控器会对结果进行综合汇总管控,得到最终的超长位数计算结果。由此可见,shor算法在求解超长位大合数N的质因子时,所需数据运算超过现有的计算机的最大数据表示(264-1),在此计算过程中就用到了超长位数的编码和超长位数的加法运算。因此,使用本发明所述超长位数编码和超长位数加法运算进行计算可以很好的解决数据太大无法用现有计算机计算的问题。
图3是采用本发明的超长位数编码处理方法根据Shor算法进行因式分解的具体实施例的流程图。如图3所示,将一个超过2512的大合数A用Shor算法按照超长位数编码运算过程进行计算,其中包含超长位数的加法计算过程。
如图3中的步骤S31所示,确定超长位合数:
A=89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715323561981300002286071312272406526781657562786883878946793069280737057523435732477591317599646617126077367662938702372050520303688765359321867171510601857712632753。
该合数采用传统的计算方法,在现有计算机中计算是存在超过计算机表示位的困难,基于本发明方法可以很好的解决该困难。
然后根据步骤S32,将超长位合数A进行超长位数编码,得到分层级的超长位数编码。
最后根据子步骤S33,将编码后的超长位数A用Shor算法按照所述超长位数编码的处理方法,其中包含本发明的所述超长位数加法的处理方法,求解质因子q1和q2。经过计算后得到结果为:
q1=6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503307637。
q2=13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006123469。
本发明提供了一种超过目前计算机能处理位数的超长位数的编码方法,方便在现有计算体系下能够进行超长位数的计算。本发明基于现有的计算机体系架构,把一个超长位数N(一般超过264-1),进行符号提取,然后通过符号计算编码成可以直接参与运算的分层、分级的编码,该编码的数据结构包括:编码符号、编码层级个数、每层级对应的分级基数,这三步骤实现超长位数编码。本发明进一步的提供了基于超长位数编码的加法计算方法,实现了指数级的快速计算速度。本发明基于定义的超长位数编码,还说明了超长位数编码的加法计算方法及计算过程,实现了长超位数编码的指数级快速计算。提供的方法可以满足大数据计算的快速信息处理需要。
本发明解决其技术问题采用的另一技术方案是,构造一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的区块链系统中预防时间戳攻击的方法。
因此,本发明可以通过硬件、软件或者软、硬件结合来实现。本发明可以在至少一个计算机系统中以集中方式实现,或者由分布在几个互连的计算机系统中的不同部分以分散方式实现。任何可以实现本发明方法的计算机系统或其它设备都是可适用的。常用软硬件的结合可以是安装有计算机程序的通用计算机系统,通过安装和执行程序控制计算机系统,使其按本发明方法运行。
本发明还可以通过计算机程序产品进行实施,程序包含能够实现本发明方法的全部特征,当其安装到计算机系统中时,可以实现本发明的方法。本文件中的计算机程序所指的是:可以采用任何程序语言、代码或符号编写的一组指令的任何表达式,该指令组使系统具有信息处理能力,以直接实现特定功能,或在进行下述一个或两个步骤之后实现特定功能:a)转换成其它语言、编码或符号;b)以不同的格式再现。
虽然本发明是通过具体实施例进行说明的,本领域技术人员应当明白,在不脱离本发明范围的情况下,还可以对本发明进行各种变换及等同替代。另外,针对特定情形或材料,可以对本发明做各种修改,而不脱离本发明的范围。因此,本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围内的全部实施方式。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种超长位数加法的处理方法,其特征在于,包括:
S1、基于编码模式和计算进制基数对超长位数进行编码,以生成分层级的超长位数编码;
S2、根据参与超长位数加法的超长位数的符号和根据所述超长位数生成的所述超长位数编码进行加法运算。
2.根据权利要求1所述的超长位数加法的处理方法,其特征在于,所述步骤S1进一步包括:
S11、采用多项式将十进制超长位数X=XtXt-1……X1表示成X=X1*(10)0+X2*(10)1+……+Xt*(10)t-1,t属于自然数,X的符号为X.bSign;
S12、遍历字符串XtXt-1…X1,对所述字符串中的每个字符进行二进制编码以获得编码字符串和第一层级基数;
S13、从所述编码字符串的首个非零字符开始遍历所述编码字符串,对所述编码字符串中的每个字符进行二进制编码以获得新生成的编码字符串和下一层级基数;对每次遍历获得的新生成的编码字符串进行二进制编码直至最后生成的字符串为空,且基于层数和每一层级基数生成所述分层级的超长位数编码。
3.根据权利要求2所述的超长位数加法的处理方法,其特征在于,所述步骤S12进一步包括:
S121、基于以下公式遍历字符串X=XtXt-1…X1,对所述字符串中的每个字符进行二进制编码以获得编码字符串和第一层级基数:
基于Xt→Xt/2n=α1,Xt%2n=β1,X→α1Xt-1…X1;
Xt-1+β1*10→(Xt-1+β1*10)/2n=α2,(Xt-1+β1*10)%2n=β2,X→α1α2Xt-2…X1;
……
X1+βγ-1*10→(X1+βγ-1*10)/2n=αγ,(X1+βγ-1*10)%2n=βγ,X→α1α2…αγ;
其中,编码字符串为α1α2…αγ,第一层级基数为=βγ,;n表示计算机能够计算的最大位数,%表示求余数,/表示求商,皆为整数运算。
4.根据权利要求3所述的超长位数加法的处理方法,其特征在于,所述步骤S13进一步包括:
S131、从所述编码字符串α1α2…αγ的首个非零字符开始,将α1α2…αγ作为X,执行所述步骤S121以获得新生成的字符串和下一层级基数;
S132、对新生成的字符串重复执行步骤S131直至最后生成的字符串为空;
S133、基于层数和每一层级基数生成所述分层级的超长位数编码X'=X′1*(2n)0+X′2*(2n)1+……+X′u*(2n)u-1,其中u表示层数,X′1,X′2,……,X′u为每一层的基数。
5.根据权利要求4所述的超长位数加法的处理方法,其特征在于,所述步骤S2进一步包括:
S21、基于参与超长位数加法的两个超长位数M和N生成所述分层级的超长位数编码M'和N',其中所述两个超长位数M和N的符号相同:
M'=M′1*(2n)0+M′2*(2n)1+……+M′u*(2n)u-1,u为超长位数M的层数,M′1,M′2,……,M′u为每一层的基数,
N'=N′1*(2n)0+N′2*(2n)1+……+N′v*(2n)v-1,v为超长位数N的层数;
S22、将所述分层级的超长位数编码M'和所述分层级的超长位数编码N'按照层级从低到高从右到左排列,计算每个层级的中间加法和,将每个中间加法和进行二进制编码以获得每一层级的进位数和加法结果数;
S23、基于每一层级的加法结果数、每一层级的进位数确定最终的加法结果并基于所述分层级的超长位数编码M'和N'的符号确定所述加法结果数的符号。
7.根据权利要求6所述的超长位数加法的处理方法,其特征在于,所述步骤S222进一步包括:
S2221、对于第一层级,进位数J0=0,计算所述第一层级的中间加法和add1=M′1+N′1+J0,比较所述中间加法和add1和2n,当add1<2n,则所述第一层级的加法结果数R1=add1,所述第一层级的进位数J1=0;当add1≥2n,则所述第一层级的加法结果数R1=add1%2n,所述第一层级的进位数J1=add1/2n;
S2222、对于第二层级到第t-1层级,重复执行所述步骤S2221以计算每个层级的加法结果数和进位数;
S2223、对于第t层级,计算所述第t层级的中间加法和addt=M′u+N′v+Jt-1,将所述中间加法和addt与2n进行比较;当所述中间加法和addt大于2n,所述第t层级的进位数为Jt=addt/(2n)t,所述第t层级的加法结果数Rt=addt%(2n)t,下一层级的加法结果数Rt+1=Jt;否则所述第t层级的进位数为Jt=0下一层级的,加法结果数Rt+1=0,所述第t层级的加法结果数Rt=addt。
8.根据权利要求7所述的超长位数加法的处理方法,其特征在于,在所述步骤S23中,所述加法结果resAdd=[R1,R2,……,Rt,Rt+1],t属于自然数,0≤Rt<2n。
9.根据权利要求8所述的超长位数加法的处理方法,其特征在于,在所述步骤S2中,SDN控制器将运算任务并行分发到每个子节点,每个子节点分别计算(M′1+N′1),(M′2+N′2),……,(M′u+N′v),然后将计算结果返回到所述SDN控制器,所述SND控制器汇总获得所述加法结果resAdd=[R1,R2,……,Rt,Rt+1]。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现根据权利要求1-9中任意一项权利要求所述的超长位数加法的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010618031.9A CN111831252A (zh) | 2020-06-30 | 2020-06-30 | 一种超长位数加法的处理方法和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010618031.9A CN111831252A (zh) | 2020-06-30 | 2020-06-30 | 一种超长位数加法的处理方法和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111831252A true CN111831252A (zh) | 2020-10-27 |
Family
ID=72899971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010618031.9A Pending CN111831252A (zh) | 2020-06-30 | 2020-06-30 | 一种超长位数加法的处理方法和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831252A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108536819A (zh) * | 2018-04-08 | 2018-09-14 | 上海达梦数据库有限公司 | 整型列与字符串比较的方法、装置、服务器及存储介质 |
CN109710608A (zh) * | 2018-12-05 | 2019-05-03 | 云南电网有限责任公司玉溪供电局 | 序列特征值组的存储方法及装置 |
-
2020
- 2020-06-30 CN CN202010618031.9A patent/CN111831252A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108536819A (zh) * | 2018-04-08 | 2018-09-14 | 上海达梦数据库有限公司 | 整型列与字符串比较的方法、装置、服务器及存储介质 |
CN109710608A (zh) * | 2018-12-05 | 2019-05-03 | 云南电网有限责任公司玉溪供电局 | 序列特征值组的存储方法及装置 |
Non-Patent Citations (2)
Title |
---|
DAMONMAI: "一个超长字符串表示的十进制数转化为十六进制的字符串", 《HTTPS://BLOG.51CTO.COM/U_9492221/1564392》 * |
余发亮 等: "大数运算实现的相关技术研究", 《武汉纺织大学学报》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Cortese et al. | Loading classical data into a quantum computer | |
Hubig et al. | Generic construction of efficient matrix product operators | |
US20210182721A1 (en) | Method and apparatus for constructing quantum machine learning framework, quantum computer and computer storage medium | |
von zur Gathen | Irreducibility of multivariate polynomials | |
KR100756137B1 (ko) | 제산 및 제곱근 연산 유닛 | |
CN113592093B (zh) | 量子态制备电路生成方法、装置、量子操作芯片及设备 | |
Borinsky | Feynman graph generation and calculations in the Hopf algebra of Feynman graphs | |
Matrassulova et al. | Algebraic fields and rings as a digital signal processing tool | |
JP2021193570A (ja) | 位相演算を行うための方法および装置 | |
CN117808101A (zh) | 一种基于fpga的神经网络推理方法、系统及存储介质 | |
CN111831252A (zh) | 一种超长位数加法的处理方法和计算机可读存储介质 | |
CN112364985A (zh) | 一种基于分布式编码的卷积优化方法 | |
Jiang et al. | Parallel design of arithmetic coding | |
CN111831253A (zh) | 一种超长位数减法的处理方法和计算机可读存储介质 | |
CN117312257A (zh) | 需求响应设备一致性测试平台的数据存储优化方法及系统 | |
CN111831255A (zh) | 一种超长位数乘法的处理方法和计算机可读存储介质 | |
CN111831256A (zh) | 一种超长位数除法的处理方法和计算机可读存储介质 | |
JP3953253B2 (ja) | 暗号生成装置、暗号生成プログラムを使用する電子機器、記憶媒体、暗号文復号装置 | |
US7069282B2 (en) | Method of performing the superposition operation of a Grover's or a Deutsch-Jozsa's quantum algorithm and a relative quantum gate | |
Martínez et al. | Powers of large matrices on GPU platforms to compute the roman domination number of cylindrical graphs | |
CN114819167A (zh) | 一种稀疏线性系统的稀疏近似逆量子预处理方法及装置 | |
Bierenbaum et al. | On the invariance of residues of Feynman graphs | |
Severo et al. | One-Shot Compression of Large Edge-Exchangeable Graphs using Bits-Back Coding | |
Severo et al. | Random Edge Coding: One-Shot Bits-Back Coding of Large Labeled Graphs | |
Jin et al. | A Polarity-based approach for optimization of multivalued quantum multiplexers with arbitrary single-qubit target gates |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201027 |