除法取模需要用到逆元。
逆元:对于一个整数,若存在整数,使得 ,我们可以称 为 的逆元。
由费马小定理可知:
若是质数,且,则
那么
则就是的逆元。
//求逆元模板
# include<iostream>
using namespace std;
//快速幂(实际使用时不要忘了取模)
int poww(int a, int b){
int res = 1;
int ans = a;
while(b){
if(b & 1)
res *= ans;
ans *= ans;
b >>= 1;
}
return res;
}
int main(){
int a, p;
cin >> a >> p;
cout << poww(a, p - 2) << endl;
return 0;
}
除法取模:
由费马小定理可知:
, 其中m为质数。
就可以转换为 ,其中a^(m-2)是a的逆元。
//这里设对 a/b 取模 mod = 4933
# include<iostream>
using namespace std;
const int mod = 4933;
int poww(int a, int b, int mod){
int res = 1;
int ans = a % mod;
while(b){
if(b & 1)
res = ans * res % mod;
ans = ans * ans % mod;
b >>= 1;
}
return res;
}
int main(){
int a, b;
cin >> a >> b;
cout << ((a % mod) * poww(b, mod - 2, mod) % mod) % mod << endl;
return 0;
}