-
-
[旧帖] [求助] 0.00雪花
-
发表于: 2012-10-13 15:49 787
-
我在看雪论坛上下载了一个RSA算法的大数库,里面的除法运算没看懂,希望大神指点下:
CBigInt CBigInt::Div(CBigInt& A)
{
if(A.m_nLength==1)return Div(A.m_ulValue[0]);
CBigInt X,Y,Z;
unsigned i,len;
unsigned __int64 num,div;
Y.Mov(*this);
while(Y.Cmp(A)>=0)
{
div=Y.m_ulValue[Y.m_nLength-1];
num=A.m_ulValue[A.m_nLength-1];
len=Y.m_nLength-A.m_nLength;
if((div==num)&&(len==0)){X.Mov(X.Add(1));break;}
if((div<=num)&&len){len--;div=(div<<32)+Y.m_ulValue
[Y.m_nLength-2];}
div=div/(num+1);
Z.Mov(div);
if(len)
{
Z.m_nLength+=len;
for(i=Z.m_nLength-1;i>=len;i--)Z.m_ulValue[i]
=Z.m_ulValue[i-len];
for(i=0;i<len;i++)Z.m_ulValue[i]=0;
}
X.Mov(X.Add(Z));
Y.Mov(Y.Sub(A.Mul(Z)));
}
return X;
}
一直都没搞明白
if(len)
{
Z.m_nLength+=len;
for(i=Z.m_nLength-1;i>=len;i--)Z.m_ulValue[i]
=Z.m_ulValue[i-len];
for(i=0;i<len;i++)Z.m_ulValue[i]=0;
}
这句是干嘛的???
他的大数结构是这样的
unsigned m_nLength;//大数在2^32进制下的长度
unsigned long m_ulValue[BI_MAXLEN];//用数组记录大数在2^32进制下每一位的值 从低位到高位
CBigInt CBigInt::Div(CBigInt& A)
{
if(A.m_nLength==1)return Div(A.m_ulValue[0]);
CBigInt X,Y,Z;
unsigned i,len;
unsigned __int64 num,div;
Y.Mov(*this);
while(Y.Cmp(A)>=0)
{
div=Y.m_ulValue[Y.m_nLength-1];
num=A.m_ulValue[A.m_nLength-1];
len=Y.m_nLength-A.m_nLength;
if((div==num)&&(len==0)){X.Mov(X.Add(1));break;}
if((div<=num)&&len){len--;div=(div<<32)+Y.m_ulValue
[Y.m_nLength-2];}
div=div/(num+1);
Z.Mov(div);
if(len)
{
Z.m_nLength+=len;
for(i=Z.m_nLength-1;i>=len;i--)Z.m_ulValue[i]
=Z.m_ulValue[i-len];
for(i=0;i<len;i++)Z.m_ulValue[i]=0;
}
X.Mov(X.Add(Z));
Y.Mov(Y.Sub(A.Mul(Z)));
}
return X;
}
一直都没搞明白
if(len)
{
Z.m_nLength+=len;
for(i=Z.m_nLength-1;i>=len;i--)Z.m_ulValue[i]
=Z.m_ulValue[i-len];
for(i=0;i<len;i++)Z.m_ulValue[i]=0;
}
这句是干嘛的???
他的大数结构是这样的
unsigned m_nLength;//大数在2^32进制下的长度
unsigned long m_ulValue[BI_MAXLEN];//用数组记录大数在2^32进制下每一位的值 从低位到高位
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
- [求助]扩展欧几里得算法求乘法逆元 1438
- [求助]关于中国剩余定理在RSA算法中的应用问题 1111
- [求助]大数模逆运算 1066
- [求助] 788
看原图
赞赏
雪币:
留言: