数论中的取模运算

数论中的取模运算

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_39905917/article/details/83039097
今日推荐