同模与模算术
(a+b) mod n=((a mod n)+(b mod n))mod n
(a-b) mod n=((a mod n)-(b mod n)+n)mod n
ab mod n=(a mod n)(b mod n)mod n注意乘法中(a mod n)(b mod n)是否会超出int的范围
//乘法求模函数
int mulMod(int a, int b, int n)
{
a%=n,b%=n;
return (int)(__int64)(a*b%n);
}
n和m, 输出n mod m 的值. n<=10^100, m<=10^9
int bigIntMod(string n,int m)
{
int len=n.length();
int ans=0;
for(int i=0;i<len;i++)
{
ans=(int)(((__int64)ans*10+n[i]-'0')%m);
}
return ans;
}
正整数a,n,m,求a^n mod m. a,n,m<=10^9
int powMOd(int a,int n,int m)
{
int ans=1;
for(int i=0;i<n;i++)ans=(int)((__int64)(ans*a)%m);
return ans;
}
//时间复杂度为O(n)
//分治法,速度更快
int powMod(int a,int n,int m)
{
if(n==0)return 1;
int x=powMod(a,n/2,m);
__int64 ans=(__int64)x*x%m;
if(n%2==1)ans=ans*a%m;
return (int)ans;
}
//时间复杂度为O(logn)
正整数a,b,n,解方程ax≡b (mod n), 即ax mod n=b mod b, a,b, n<=10^9
我们知道a ≡b (mod n)的充要条件是(a-b)是n的倍数于是本题可以变成(ax-b)是n的整数倍,设ax-b=ny
需要说明的是, 如果x是方程的解, 满足x≡y(mod n)的其它整数y也是方程的解
所以同余方程的一个解指的实际上是一个同余等价类
方程ax≡1(mod n)的解称为a关于模n的逆. 当gcd(a,n)=1时,该方程有唯一解,否则无解