同余 逆元 快速幂求逆元

给定 n组 ai,pi,其中 pi 是质数,求 ai 模 pi 的乘法逆元,若逆元不存在则输出 impossible

同余:整数a,b,m满足a mod m = b mod m, 称为a和b对m同余。
性质:a-b是m的整数倍。
eg:23-5是6的整数倍,23 mod 6 = 5 mod 6。

逆元
(a+b)%p=(a%p+b%p)%p
(a-b)%p=(a%p-b%p+p)%p//防止出现负数 
(a*b)%p=((a%p)*(b%p))%p
但是除法不满足-->使用逆元

其中c为b的逆元
所以 求(a/b)%p即求(a*inv(b))%p-->((a%p)*(inv(b)%p))%p

 

计算逆元->费马小定理
(a/b)%p=(a*(b^(p-2)))%p
//a是不能被质数p整除的正整数,所以两个数互质,gcd(a,p) = 1

 

#include<bits/stdc++.h>
using namespace std;
int n, a, p;
void qmi(long long a, long long k, long long p)
{
	long long res = 1;
	while(k)
	{
		if(k&1) res = res*a%p;
		a = a*a%p;
		k>>=1;
	}
	if(a%p) cout<<res<<endl;
	else cout<<"impossible"<<endl;
}
int main()
{
	cin >>n;
	while(n--)
	{
		cin >>a >>p;
		qmi(a, p-2, p);
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值