数论-求逆元

五迷三道 提交于 2020-02-03 22:28:33

求逆元:

 

(m / q ) % x ,这里因为m / q 不一定为整数,所以构造一个新的式子: (m / q) % x = m * y % x, 这里的y就是要求的逆元

 

  • 费马小定理加快速幂求逆元:

求法:原式变形为:

1 / q = y (%x)-> 

1 = y * q(%x) ->

由于x是质数,gcd(q,x) == 1,所以满足费马小定理,-> 

1 = q^(x-1) (%x)->

q^(x-1) = y * q (%x)->

y = q^(x-2) (%x)->

所以:(m / q) % x = m * q ^ (x - 2) % x

 

 

 1 #include <iostream> 
 2 using namespace std;
 3 
 4 typedef long long LL;
 5 
 6 int qmi(int a, int b, int c){
 7     LL res = 1;
 8     while(b){
 9         if(b & 1) res = res * a % c;
10         a = a * (LL)a % c;
11         b >>= 1;
12     }
13     return res;
14 }
15 
16 int main(){
17     int n;cin >> n;
18     while(n --){
19         int a, p;cin >> a >> p;
20         if(a % p == 0) cout << "impossible" << endl;//a和p不是互质的
21         else cout << qmi(a, p - 2, p) << endl;
22     }
23     return 0;
24 }
View Code

 

 

 

end

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!