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 }
时间: 2024-08-05 21:57:14

COJ 1163 乘法逆元的求解的相关文章

浅谈欧拉定理及乘法逆元

浅谈欧拉定理及乘法逆元 本篇随笔简单讲解一下信息学奥林匹克竞赛数论部分欧拉定理及乘法逆元这一知识点.介绍的内容大致分为这么几个部分:"同余的基本概念.费马小定理.欧拉定理及其推论.乘法逆元". 同余的基本概念 同余的概念啊非常简单啦:如果两个整数\(a,b\)除以一个数\(m\)的余数相等的话,那么就叫做\(a,b\)在模\(m\)的意义上同余. 记作: \[ a\equiv b\,\,\,(mod\,\,m) \] 那么根据同余的这个定义,我们很容易能推导出一个性质:如果两个数\(a

乘法逆元 求解及应用

乘法逆元定义 假设a,x,b为整数,b>1,且有$ax \equiv 1(\mod b)$成立 那么a,x互为膜b的逆元 通俗一些,即两数乘积膜p等于1,则他们互为b的逆元 ************************ 逆元算法求解 扩展欧几里得 既然已有同余式$ax \equiv 1(\mod b)$ 那么我们可以将其转化为$ax+by=1$ 可以用扩展欧几里得算法求出其最小非负整数解即为a在膜b意义下的逆元 不会扩展欧几里得算法看这里 扩展欧几里得 推导及应用 void exgcd(in

数论学习之乘法逆元

用法:用于除法取模 思路:扩欧 要求:b.p互质 设k为b的乘法逆元: 则在求解除法取模问题时: 有(a/b)%p =>(a*k)%p 当b很大时,用除法会出现精度问题..so 乘法逆元: 如果b*k ≡ 1 (mod p) 则称k是b关于p的乘法逆元 我们可以通过求 b 关于 p 的乘法逆元 k,将 a 乘上 k 再模 p,即 (a * k) mod p.其结果与(a / b) mod p等价. 证: 因为 b * k ≡ 1 (mod p) 则有 b * k = p* x+1 得到 k =

HDU1576 A/B(乘法逆元)

这题大概是,整数模9973乘法群?然后存在乘法逆元. 于是题目要求$A \div B \pmod {9973} $其实就相当于求$A \times B^{-1}\pmod {9973} $. 只要求出B的逆元就OK了. 计算模n下的乘法逆元可以用用扩展欧几里得算法求解,即解下面的线性同余方程: $$ Ax \equiv 1 \pmod {n} $$ 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 #de

Light OJ 1067 Combinations (乘法逆元)

Description Given n different objects, you want to take k of them. How many ways to can do it? For example, say there are 4 items; you want to take 2 of them. So, you can do it 6 ways. Take 1, 2 Take 1, 3 Take 1, 4 Take 2, 3 Take 2, 4 Take 3, 4 Input

求乘法逆元的几种方法

(数学渣,下面的文字可能有误,欢迎指教)乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减乘与模运算的顺序交换不会影响结果,但是除法不行.有的题目要求结果mod一个大质数,如果原本的结果中有除法,比如除以a,那就可以乘以a的逆元替代. 在mod p的运算中,a存在乘法逆元当且仅当a与p互质.一般题目给的是一个大质数,所以只要a不是p的倍数,就以求乘法逆元. 目前了解到的求法有三种:1.扩展

2016&quot;百度之星&quot; - 资格赛(Astar Round1)-(模拟+线段树+乘法逆元)

Problem A Accepts: 1351 Submissions: 9951 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串.现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值.一个字符串的哈希值,由以下公式计算得到: H

HDU 1576 -- A/B (总结乘法逆元的几种求法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7264    Accepted Submission(s): 5774 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%99

深入浅出乘法逆元

1.模的运算律 2.定义 3.求解 3.1费马小定理 3.2扩展欧几里得算法 3.3线性求解 深入浅出乘法逆元 模的运算律 先来一波模运算律表: 运算律 内容 交换律 \((a+b)\%p=(b+a)\%p\)\((a\times b)\%p=(b\times a)\%p\) 结合律 \(((a+b)\%p+c)\%p=(a+(b+c)\%p)\%p\)\(((a\times b)\%p\times c)\%p=(a\times (b\times c)\%p)\%p\) 分配率 \(((a+b)