快速幂求逆元
作者:互联网
给定 n 组 ai,pi,其中 pi 是质数,求 ai 模 pi 的乘法逆元,若逆元不存在则输出 impossible。
注意:请返回在 0∼p−1 之间的逆元。
乘法逆元的定义
若整数 b,m 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 a/b≡a×x(modm),则称 x 为 b 的模 m 乘法逆元,记为 b−1(modm)。
b 存在乘法逆元的充要条件是 b 与模数 m 互质。当模数 m 为质数时,bm−2 即为 b 的乘法逆元。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个数组 ai,pi,数据保证 pi 是质数。
输出格式
输出共 n 行,每组数据输出一个结果,每个结果占一行。
若 ai 模 pi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible。
。。。
a有逆元的充要条件是a与b互质。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
ll ans(ll a,ll b,ll mod)
{
ll res = 1;
while(b)
{
if(b & 1) res *= a,res %= mod;
b /= 2;
a *= a%mod;
a %= mod;
}
return res;
}
int main()
{
ll n;
scanf("%lld",&n);
while(n--)
{
ll a,b;
scanf("%lld%lld",&a,&b);
if(__gcd(a,b) == 1)
{
printf("%lld\n",ans(a,b-2,b)%b);
}
else
{
printf("impossible\n");
}
}
}
标签:幂求,ai,res,ll,逆元,pi,快速,乘法 来源: https://blog.csdn.net/p15008340649/article/details/114984287