逆元的各种求解方式

若ax≡1 mod f, 则称a关于模f的乘法逆元为x。也可表示为ax≡1(mod f)。

当a与f互素时,a关于模f的乘法逆元有唯一解。如果不互素,则无解。如果f为素数,则从1到f-1的任意数都与f互素,即在1到f-1之间都恰好有一个关于模f的乘法逆元。

(不会证明,想通了补)

首先a与f要互素,否则无逆元

1.扩展欧几里德:扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)

        扩展欧几里德的证明和代码http://www.cnblogs.com/jhz033/p/5330252.html

        ax≡1 mod f;相当于ax+fy==1,因为gcd(a,f)==1;

        x解出来就是逆元

2.费马小定理:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。

         如果f为素数。可以根据费马小定理得到逆元为

     推导过程如下

3.公式如下

现在我们来证明它,已知,证明步骤如下

上面部分取自http://blog.csdn.net/acdreamers/article/details/8220787

时间: 2024-10-05 08:38:54

逆元的各种求解方式的相关文章

递归式的三种求解方式

求解递归式对于分冶算法的重要性不言而喻 以下介绍了三种求解递归式的方法 1,代换法: 缺点:代换法主要的缺点在于,对于任何递归式,我们先得去猜其解,对于猜错了同学,如果不幸猜出的结果和正确结果相差太大,虽然可以推导,但是意义不大: 优点:代换法相较于递归树法更为严谨,相较于主定理应用范围更广,主定理只能求解类似于T(n) = aT(n/b)+n/c这种形式的递归式: 下面给出一个递归表达式T(n) = 2T(n/2)+n,求其解: 首先猜一下其解为O(nlgn);那么我们只需要证明T(n)<cn

fibonacci数列的两种求解方式:基础递归VS动态规划

/* * 基础解法,按照递归方法求解,该算法的运算时间是指数级增长的 * 这种算法对于相似的子问题进行了重复的计算,因此不是一种高效的算法 */ public class FibonacciRecursion { //-----------计算Fibonacci数列值的递归函数-------------- public static int fib(int n){ if(n==1||n==2){//序列中第1,2个数为1 return 1; } return fib(n-1)+fib(n-2);

迷宫问题的求解方式:应用深度优先和广度优先的搜索

用堆栈实现迷宫问题,二维数组表示迷宫:1表示墙壁,0表示可以走的路,只能横着走或竖着走 不能斜着走,要求编程实现找到从左上角到右下角的路线 //深度优先:有解就退出搜索(不一定是最优解) #include<iostream> #include<stdio.h> using namespace std; #define ROW 5 #define COL 5 typedef struct point { int _row; int _col; }Point; Point stack[

那些有关求解next数组的算法

next数组的历史 有关字符串的模式匹配算法中,比较容易写出的是朴素的匹配算法也就是一种暴力求解方式,但是由于其时间复杂度为子串长度和主串长度的乘积,例如strlen(subStr) = n,strlen(mainStr) = m,则其时间复杂度为O(mn). 为了能够得到更有效的匹配算法,D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特--莫里斯--普拉特操作(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达

最大独立集求解

定义: 独立集:在一个图中,找到一个集合包含的所有点相互之间都不存在连边 最大独立集:在所有独立集中包含元素个数最多的独立集 之前只是知道二分图的最大独立集 = 总点数-最大匹配数 但是一般无向图的情况下求解就不能这样了 换个角度思考,其实求最大独立集也是相当于建立一个相反图(把当前的边都去掉,添加上之前不被选中的边) 就变成求修改之后的最大完全图的点的个数了,因为我们要保证选到的点之间不存在任何相连的边,那么图反过来之后,选到的点两两之间就必然 存在边,否则说明之前的图是存在边的,也就是两个点

matlab学习笔记之求解线性规划问题和二次型问题

一.线性规划问题 已知目标函数和约束条件均为线性函数,求目标函数的最小值(最优值)问题. 1.求解方式:用linprog函数求解 2.linprog函数使用形式: x=linprog(f,A,b)  x=linprog(f,A,b,Aeq,beq)  x=linprog(f,A,b,Aeq,beq,lb,ub)  x=linprog(f,A,b,Aeq,beq,lb,ub,x0)  x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)   [x,fval]=linp

Tarjan算法:求解图的割点与桥(割边)

简介: 割边和割点的定义仅限于无向图中.我们可以通过定义以蛮力方式求解出无向图的所有割点和割边,但这样的求解方式效率低.Tarjan提出了一种快速求解的方式,通过一次DFS就求解出图中所有的割点和割边. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 割点与桥(割边)的定义 在无向图中才有割边和割点的定义 割点:无向连通图中,去掉一个顶点及和它相邻的所有边,图中的连通分量数增加,则该顶点称为割点. 桥(割边):无向联通图中,去

浅谈模质数意义下的乘法逆元

原文链接(更好的阅读体验) 参考文章www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数\(b,m\)互质,并且\(b|a\),若存在一个整数\(x\),使得\(a / b \equiv a \ast x (mod \text{ } m)\),称\(x\)为 \(b\)的模\(m\)乘法逆元. 乘法逆元的用处 有时候,我们需要求\(a/b \text{ } mod \text{

乘法逆元 学习总结

基本都是抄的大神写好的东西,主要作为一个复习,加深印象. 定义:若整数 b,m 互质,并且 b|a(b整除a),则存在一个整数 x,使得 a/b ≡ a * c (mod m).则称 x 为 b 的模 m 乘法逆元,记为 b-1(mod m). 那么我们如何求 b-1(mod m) ? 根据定义,a/b ≡ a * b-1 ≡ a/b * b * b-1 (mod m),那么 b * b-1 ≡ 1 (mod m). 到这里可以用两种方法求解b-1(mod m): 1.费马小定理. 费马小定理: