#include <iostream>
#include <cstring>
using namespace std;
void mul_mod(int a,int b,int n) //普通取模运算
{
a%=n;
b%=n;
cout<<"After mod is "<<a*b%n<<endl;
}
void bigint(string s,int m) //大整数取模
{
int ans=0;
for(int i=0;i<s.length();i++)
ans=(int)(ans*10+s[i]-'0')%m;
cout<<s<<" mod "<<m<<" = "<<ans<<endl;
}
int pow_mod(int a,int n,int m) //幂取模,运用分治方法
{ //a为底数,n为指数,m为取模数
if(n==0) return 1;
int x=pow_mod(a,n/2,m);
long long int ans=(long long int)x*x%m;
if(n%2==1) ans=ans*a%m;
return (int)ans;
}
int main()
{
int a,b,n;
int m;
string s;
int x,y,z,result;
//普通取模运算
cout<<"两整数的乘积对n取模:"<<endl;
cout<<"Input a and b:"; cin>>a>>b;
cout<<"Input mod n:";
cin>>n;
mul_mod(a,b,n);
//普通取模运算
//大整数取模
cout<<"大整数取模:"<<endl;
cout<<"Input s and m:"; cin>>s>>m;
bigint(s,m);
//大整数取模
//幂取模
cout<<"幂取模:请输入底数x,指数y,和取模数z:"<<endl;
cin>>x>>y>>z;
result=pow_mod(x,y,z);
cout<<x<<"的"<<y<<"次方对"<<z<<"取模的结果为:"<<result<<endl;
//幂取模
return 0;
}