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

📄 main.cpp

📁 RSA加密中的大整数运算
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				  case 'a':
					  {
						  char buffer[30];
						  strcpy(buffer,o1.outputDEC().c_str());
						  n=atoi(buffer);
						  return an(n);
					  }break;
				  case 'n':
					  {
						  char buffer[30];
						  strcpy(buffer,o1.outputDEC().c_str());
						  nn=_atoi64(buffer);
						  nn=prime(nn);
						  _ui64toa(nn,buffer,10);
						  string result=buffer;
						  return result;
					  }

				  }

          break;
		}//case 2

case 3:
	{
        //       cout<<endl<<endl<<"请输入操作计算式子 :"<<endl<<endl;
        //       cin>>str;

			   int j=0;

			    if(str[i]=='v'||str[i]=='V')
	 {
		 i+=3;
		 	while(i<strlen(str))
	{
        if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
         else break;
	}
			varbuf[j]='\0';
    int varint=atoi(varbuf);
    o1=VAR[varint];

	 }
	else if(str[i]=='e'||str[i]=='E')
	 {
		 i+=3;
		 	while(i<strlen(str))
	{
        if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
         else break;
	}
			varbuf[j]='\0';
    int varint=atoi(varbuf);
    o1=EXP[varint];

	 }
	else
	{
	           while(i<strlen(str))
			   {
                  if(str[i]>=int('0')&&str[i]<=int('9'))str1[i]=str[i++];
                  else break;
			   }
	           str1[i]='\0';
              	p1=str1;
	            o1.loadDEC(p1);
				
	}

	            j=0;
             	while(i<strlen(str))
				{
                   if(((str[i]<int('0')||str[i]>int('9'))&&str[i]!='m'&&str[i]!='M')&&str[i]!='v'&&str[i]!='V'&&str[i]!='e'&&str[i]!='E')c[j++]=str[i++];
                   else break;
				}
             	c[j]='\0';
				if(str[i]=='m'||str[i]=='M')inverse=1;
				if(inverse==0)
				{
             	j=0;

							    if(str[i]=='v'||str[i]=='V')
	 {
		 i+=3;
		 	while(i<strlen(str))
	{
        if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
         else break;
	}
			varbuf[j]='\0';
    int varint=atoi(varbuf);
    o2=VAR[varint];

	 }
	else if(str[i]=='e'||str[i]=='E')
	 {
		 i+=3;
		 	while(i<strlen(str))
	{
        if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
         else break;
	}
			varbuf[j]='\0';
    int varint=atoi(varbuf);
    o2=EXP[varint];

	 }
	else
	{


              	while(i<strlen(str))
				{
                     if(str[i]>=int('0')&&str[i]<=int('9'))str2[j++]=str[i++];
                     else break;
				}
             	str2[j]='\0';
            	p2=str2;
	            o2.loadDEC(p2);  

	}
				}

				while(str[i]!='d'&&str[i]!='D')
					i++;
				i++;
	            j=0;


				
							    if(str[i]=='v'||str[i]=='V')
	 {
		 i+=3;
		 	while(i<strlen(str))
	{
        if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
         else break;
	}
			varbuf[j]='\0';
    int varint=atoi(varbuf);
    o3=VAR[varint];

	 }
	else if(str[i]=='e'||str[i]=='E')
	 {
		 i+=3;
		 	while(i<strlen(str))
	{
        if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
         else break;
	}
			varbuf[j]='\0';
    int varint=atoi(varbuf);
    o3=EXP[varint];

	 }
	else
	{

             	while(i<strlen(str))
				{
                   if(str[i]>=int('0')&&str[i]<=int('9'))str3[j++]=str[i++];
                   else break;
				}
				str3[j]='\0';


				p3=str3;
	            //cout<<str1<<c<<str2<<endl;


				o3.loadDEC(p3);
	}
                cout<<endl<<endl<<str;
	            if(str[strlen(str)-1]!='=')cout<<"=";

				switch(c[0])
				{
				case '*':
					result=BImodmul2(o1,o2,o3);
				
									  //cout<<endl<<"是否要存储结果?     "<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                      //cout<<endl<<"已存储结果为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;
				  }
				                 					  _itoa((markexp-1)%20,tmp,10);

					  return result.outputDEC()+"已设置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
					break;
				case '/':
					result=Remainder(o1,o2,remainder);
                 	result=BImodmul2(result,Ones,o3);
					remainder=BImodmul2(remainder,Ones,o3);
			
									  //cout<<endl<<"是否要存储结果?     "<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                      //cout<<endl<<"已存储结果为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;

			//	cout<<endl<<"是否要存储余数?"<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                    // cout<<endl<<"已存储余数为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;
				  }

				   _itoa((markexp-1)%20,tmp,10);

			 return result.outputDEC()+"..."+remainder.outputDEC()+"已设置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();



				  }
					break;
				case '^':
					result=BImodexp(o1,o2,o3);
									  //cout<<endl<<"是否要存储结果?     "<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                      //cout<<endl<<"已存储结果为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;
				  }
				    _itoa((markexp-1)%20,tmp,10);

			 return result.outputDEC()+"已设置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
					break;
				case '+':
					{
				
				    result=o1+o2;
					result=BImodmul2(result,Ones,o3);             //由于没有模加,只能用与一相乘在模
                    
									  //cout<<endl<<"是否要存储结果?     "<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                      //cout<<endl<<"已存储结果为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;
				  }
				  				    _itoa((markexp-1)%20,tmp,10);

			 return result.outputDEC()+"已设置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
					break;
					}
				case '-':
					if(inverse==0)
					{
				    result=o1-o2;
					result=BImodmul2(result,Ones,o3);             //由于没有模减,只能用与一相乘在模
                    
									  //cout<<endl<<"是否要存储结果?     "<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                      //cout<<endl<<"已存储结果为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;
				  }
				  				    _itoa((markexp-1)%20,tmp,10);

			 return result.outputDEC()+"已设置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
					break;
					}
					else if(inverse==1)
					{
						result=BIinverse(o1,o3);
                        
										  //cout<<endl<<"是否要存储结果?     "<<result.outputDEC()<<endl;
				   //cin>>yes;
				   //if(yes=='y'||yes=='Y')
				  {
					  EXP[markexp%20]=result;
                      //cout<<endl<<"已存储结果为:EXP"<<markexp<<"="<<result.outputDEC()<<endl;  
					  markexp++;
				  }
					}
					
                				    _itoa((markexp-1)%20,tmp,10);

			 return result.outputDEC()+"已设置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
				}
				break;
	}//case 3
case 4:
        inputvar="已设置VAR";
	inputvar+=input(str);
        return inputvar;
	break;
case 5:
    helpfile=help();
	return helpfile;
	break;


}//switch select




//goto restart;
return "";

}


string help()
{
	
string result="\0";

result="                                 声明:操作数和结果不能出现负数                                  ";


result+="                                                                              BY Ghost Prince           ";


result+="     1   双操作数运算  +  -  *  /  %  ^  ==  !=  > < <<=  >>=                                        ";


result+="                符号           功能            输入例子          结果                                ";

result+="                  +   :       result=p1+p2        1+2=              3                                ";

result+="                  -   :       result=p1-p2        2-1=              1                                ";

result+="                  *   :       result=p1*p2        2*3=              6                                ";

result+="                  /   :       result=p1/p2        6/2=              3                                ";

result+="                  %   :       result=p1%p2        3%9=              3                                ";

result+="                  ^   :       result=p1^p2        2^3=              8                                ";

result+="                  ==  :       BOOL=p1==p2         2==4=             0                                ";

result+="                  !=  :       BOOL=p1!=p2         1!=9=             1                                ";

result+="                  >   :       BOOL=p1>p2          6>4=              1                                ";

result+="                  <   :       BOOL=p1<p2          6<4=              0                                ";

result+="                  <<= :       result=p1*(2^p2)    6<<=1=            12                               ";

result+="                  >>=   :     result=p1/(2^p2)    6>>=1=            3                                ";

result+="                  ~     :     result=gcd(p1,p2)   6~8=              2                                ";

result+="     2   单操作数运算  ++  --                                                                        ";

result+="                  ++   :      result=p1+1         6++=              7                                ";

result+="                  --   :      result=p1-1         6--=              5                                ";
result+="                  a    :      result=p1的本原元   25a               2 3 8 12 13 17 22 23             ";
result+="                  n    :      result=p1欧拉函数   10n               4                                ";


result+="     3   三操作数运算  模+  模-  模*  模/  模^ 求逆-                                                   ";

result+="                  模+  :      result=(p1+p2)mod(p3)        2+4mod7=	  6                           ";

result+="                  模-  :      result=(p1-p2)mod(p3)        6-4mod7=	  2                           ";

result+="                  模*  :      result=(p1*p2)mod(p3)        2*4mod7=	  1                           ";

result+="                  模/  :      result=(p1/p2)mod(p3)        6/3mod7=	  2                           ";

result+="                  模^  :      result=(p1^p2)mod(p3)        2^3mod7=	  1                           ";

result+="                  求逆-:      result=(p1的逆)mod(p3)       3-mod5=	  2                           ";
result+="     4   多操作数运算                                                                                ";
result+="                  中国剩余定理:   (输入例子,后面一定要加=号) x=1mod2 x=2mod3 x=3mod5=   23          ";
return result;
}



string input(char *buf)
{
	char name[20]="VAR";
	//int i=1;
	char mark[3];
string result;
	//char buf[5000]="\0";
char temp[5];
	//cout<<endl<<endl<<"请输入变量对应的大整数:"<<endl<<endl;
	//while(i)
	//{
		strcpy(name,"VAR");
		_itoa(markvar%20,mark,10);
    	strcat(name,mark);
		//cout<<name<<"=";
		//cin>>buf;
		if(buf[0]!='-')
		{
		string c=buf;
		VAR[markvar%20].setZero();
		VAR[markvar%20].loadDEC(c);
		cout<<"你已经设置"<<name<<"="<<VAR[markvar%20].outputDEC()<<endl<<endl;

                 _itoa(markvar,temp,10);
                 
             result=temp;
             result+="=";
result+=VAR[markvar%20].outputDEC();
		markvar++;
return result;
                
		}
		//else i=0;



	//}

}

⌨️ 快捷键说明

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