同模与模算术

同模与模算术

(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时,该方程有唯一解,否则无解

发布了21 篇原创文章 · 获赞 8 · 访问量 2741

猜你喜欢

转载自blog.csdn.net/shen253135371/article/details/96170232
今日推荐