首页 > 代码库 > COJ 1163 乘法逆元的求解

COJ 1163 乘法逆元的求解

乘法逆元就是求一个 a/b = c(mod m)在已知a%m , b%m 的条件下 求c的解

 1 #include <cstdio> 2 #include <cstring> 3  4 using namespace std; 5 #define ll long long 6 const int N = 100005; 7 int val[N]; 8  9 ll ex_gcd(ll a , ll b , ll &x , ll &y)10 {11     if(b == 0){12         x=1 , y=0;13         return a;14     }15     ll ans = ex_gcd(b,a%b,x,y);16     ll t=x;17     x=y,y=t-a/b*y;18     return ans;19 }20 21 ll inv(ll a , ll b , ll mod)22 {23     ll x , y;24     ll d = ex_gcd(b,mod,x,y);25     return a*x%mod;26 }27 28 int main()29 {30     int n,m;31     while(scanf("%d%d" , &n , &m ) == 2)32     {33         ll sum = 1;34         for(int i=0 ; i<n ; i++){35             scanf("%d" , val+i);36             sum = (sum*val[i])%m;37         }38         for(int i=0 ; i<n ; i++){39             ll ans = (inv(sum , (ll)val[i] , m)+m)%m;40             if(i==0) printf("%lld" , ans);41             else printf(" %lld" , ans);42         }43         printf("\n");44     }45     return 0;46 }

 

COJ 1163 乘法逆元的求解