这是一个黑科技。

可以将某些题目硬生生地压到O(N)

不过这求的是1~n的逆元,多了不行……


结论

接下来放式子:

inv[i]=(M-M/i)*inv[M%i]%M;

用数学方法来表示:

i−1=(M−⌊Mi⌋)(Mmod  i)−1mod  Mi^{-1}=\left(M-\lfloor\frac{M}{i}\rfloor\right)\left(M\mod i\right)^{-1}\mod Mi−1=(M−⌊iM​⌋)(Mmodi)−1modM


证明

设k=⌊Mi⌋k=\lfloor\frac{M}{i}\rfloork=⌊iM​⌋,r=Mmod  ir=M \mod ir=Mmodi

∴ik+r≡0(mod  M)∴−ik≡r(mod  M)\therefore ik+r \equiv 0 \left(\mod M\right) \\
\therefore -ik \equiv r \left(\mod M\right)∴ik+r≡0(modM)∴−ik≡r(modM)

两边同时除以iririr得

−k∗r−1≡ii−1(mod  M)∴ii−1=−k∗r−1mod  M-k*r^{-1} \equiv i^{i-1} \left(\mod M\right) \\
\therefore i^{i-1}=-k*r^{-1} \mod M −k∗r−1≡ii−1(modM)∴ii−1=−k∗r−1modM



i−1=(M−⌊Mi⌋)(Mmod  i)−1mod  Mi^{-1}=\left(M-\lfloor\frac{M}{i}\rfloor\right)\left(M\mod i\right)^{-1}\mod Mi−1=(M−⌊iM​⌋)(Mmodi)−1modM

O(N)求出1~n逆元的更多相关文章

  1. O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求

    筛素数 void shai() { no[1]=true;no[0]=true; for(int i=2;i<=r;i++) { if(!no[i]) p[++p[0]]=i; int j=1, ...

  2. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  3. Java程序设计求出岁数

    题目:我年龄的立方是个4位数.我年龄的4次方是个6位数.这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次,求出我今年几岁. 直接拷贝运行就可以了. public class Age { ...

  4. projecteuler 10001st prime (求出第10001个质数)

    By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. ...

  5. JAVA输入一个整数,求出其所有质因数

    首先得求出能整除A的数,再判断I是否是质数!!! import java.util.*; public class aa { public static void main(String[] args ...

  6. 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。

    主要掌握String中的方法 char[] toCharArray()           将此字符串转换为一个新的字符数组. int indexOf(String str)           返回 ...

  7. NSDateFormatter 根据时间戳求出时间

    NSDateFormatter 根据时间戳求出时间 - (void)detailWithStyle:(NSString*)style time:(NSInteger)time { // NSStrin ...

  8. OpenJudge计算概论-求出e的值

    /*======================================================================== 求出e的值 总时间限制: 1000ms 内存限制: ...

  9. Ruby求出数组中最小值及其下标

    其实很简单 Ruby的Array类自带了min方法可以求出最小值,然后调用Array的index方法传入元素值就可以求出下标 a = [1, 2, 3, 4, 5, 6] theMin = a.min ...

随机推荐

  1. Pipe进程之间的通信

    #_author:来童星#date:2019/12/11#Pipefrom multiprocessing import Process, Pipedef f(conn): conn.send([42 ...

  2. CSS——溢出文字隐藏

    溢出的文字隐藏 word-break:自动换行 normal 使用浏览器默认的换行规则. break-all 允许在单词内换行. keep-all 只能在半角空格或连字符处换行. 主要处理英文单词 w ...

  3. MyEclipse搭建Structs2开发环境

    MyEclipse10搭建Strust2开发环境 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/3496242.html

  4. 正则表达式 判断内容是否为合法的url

    var strUrl= "^((https|http|ftp|rtsp|mms)?://)" + "?(([0-9a-z_!~*'().&=+$%-]+: )?[ ...

  5. VS2010-MFC(对话框:消息对话框)

    转自:http://www.jizhuomi.com/software/171.html 前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用 ...

  6. ASP.NET的底层体系2

    文章引导 1.ASP.NET的底层体系1 2.ASP.NET的底层体系2 引言 接着上一篇ASP.NET的底层体系1我们继续往下走 一.System.Web.HttpRuntime.ProcessRe ...

  7. Quartz 定时任务配置(spring中)

    <!-- Quartz -->    <bean name="task" class="com.geostar.geosmarter.nodemanag ...

  8. 简介、变量、常数、if、基础数据类型、注释、input()

    ​ ### 1.python的历史 python2和python3的区别 python2 源码不统一,重复代码 python 源码统一,没有重复代码 2004 Django框架的诞生 2.python ...

  9. Largest Rectangle in a Histogram /// 单调栈 oj23906

    题目大意: 输入n,,1 ≤ n ≤ 100000,接下来n个数为每列的高度h ,0 ≤ hi ≤ 1000000000 求得最大矩阵的面积 Sample Input 7 2 1 4 5 1 3 34 ...

  10. LINUX挂接UNIX系统NFS文件共享

    类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍 ...