⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aa.cpp

📁 大数运算类,用于RSA算法,支持4096位二进制的数学运算
💻 CPP
字号:
#include "afxwin.h"
#include "Bigint.h"
#include "Bint.h"
#include "windows.h"

typedef struct _TTT
{	ULONG SerialNumberLength;  
	ULONG Result;  
	ULONG Reserved[2];  
	//UCHAR SerialNumberData[8];
} MEDIA_SERIAL_NUMBER_DATA;

#include "mmsystem.h"

unsigned int sqrt_16(unsigned long M)
{
    unsigned int N, i;
    unsigned long tmp, ttp;   // 结果、循环计数
    if (M == 0)               // 被开方数,开方结果也为0
        return 0;

    N = 0;

    tmp = (M >> 30);          // 获取最高位:B[m-1]
    M <<= 2;
    if (tmp > 1)              // 最高位为1
    {
        N ++;                 // 结果当前位为1,否则为默认的0
        tmp -= N;
    }

    for (i=15; i>0; i--)      // 求剩余的15位
    {
        N <<= 1;              // 左移一位

        tmp <<= 2;
        tmp += (M >> 30);     // 假设

        ttp = N;
        ttp = (ttp<<1)+1;

        M <<= 2;
        if (tmp >= ttp)       // 假设成立
        {
            tmp -= ttp;
            N ++;
        }

    }

    return N;
}

//#include "math.h"
int main()
{	CBigInt a,b,c;
	CString a1,b1,x,y;
	MEDIA_SERIAL_NUMBER_DATA bm={0};
	CBint P,Q,N,D;
	DWORD t1,t2;
	int bb=-200;
	bb%=9;

	x="4166889985013824336431725767770561189809242021900684099464811963229816785700099";
	y="331365307813878144981708690671365840573451477664368377164801794569971892602655";
	P="-0xA9BA8C2B728B66CC684DF7F254373133780CE1C861EABDB0084F2FB835ECB4138757455599F960EE66CFC4FDB1A3D0C1328313EBA0D4A0DBB62BD9DD15C2FD45";
	Q="0xD9B436D24ADA03433BEA106628B8DB11A47DCD14494C471179513B5DD794D44A3FE9748BFCADCECBD7563AF5A316221F4798792184074917BE2F4B041339D45D";
	N=P.Mul(Q);
	N=N.Div(P);

	Q="200";
	a1=Q;
	Q%=9;
	//N.Euc(Q);
	a1=Q;
	//Q=P-5;
	a.InPutFromStr(CString(P),10);
	b.InPutFromStr(CString(Q),10);
	a1=P;
	b1=P.Sub(Q);
	t1=timeGetTime();
	for(int i=0;i<10000;i++)
	{
		D=P.Add(Q);
		a1=D;
	}
	D="4166889985013824336431725767770561189809242021900684099464811963229816785700099";
	a1=D;
	a1=--D;
	a1=D;

	a1=D++;
	a1=D;
	t2=timeGetTime()-t1;
	a1.Format("%d",t2);
	AfxMessageBox(a1);
	return 0;
	
	
	a.Add(b).OutPutToStr(b1,10);
	if(a1!=b1)
	{
		c=a.Mul(b);
	}
	c=a.Mul(b);
	
	int kx=1000;
	kx=kx %98;
	kx=1000;
	kx=kx/98;
	kx=1000-kx*98;
	
	CBint m(x),mm(y);
	t2=timeGetTime();
	m="4166889985013824336431725767770561189809242021900684099464811963229816785700099";
	a1=CBint::Sqrt(x);

	t2=timeGetTime()-t2;

	a.InPutFromStr(CString("56989898988"),10);
	b=a.Mul(a);
	b.OutPutToStr(a1,10);
	P=P.Add(0);
	m+= mm;
	int k=m.Compare(mm);
	a1=m;
	m="-1";
	m=m.Add(-5);
	a1=m;
	a1=m.Sub(mm);
	a1=m.Sub(mm);
	
//	*/
	t1=timeGetTime();
	a.InPutFromStr(x);
	b.InPutFromStr(y);
	CBint tx;
	tx.InPutFromStr(x);
	CBint tx1(tx);

	a=a.Mul(b);
	a.OutPutToStr(a1);
	t1=timeGetTime()-t1;
	CString Msg;
	Msg.Format ("用时:%d ",t1);
	AfxMessageBox(Msg);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -