在p是素数的情况下,对任意整数x都有xp≡x(mod p)。这个定理被称作费马小定理其中如果x无法被p整除,我们有xp-1≡1(mod p)。利用这条性质,在p是素数的情况下,就很容易求出一个数的逆元。那上面的式子变形之后得到a-1≡ap-2(mod p),因此可以通过快速幂求出逆元

我们先来证明一下费马小定理:

费马小定理证明:

一、准备知识

引理1:剩余系定理2

若a,b,c为任意3个整数,m为正整数,且(m,c)=1,则当ac≡bc(mod m)时,有a≡b(mod m)
证明:ac≡bc(mod m)可得ac–bc≡0(mod m)可得(a-b)c≡0(mod m)因为(m,c)=1即m,c互质,c可以约去,a–b≡0(mod
m)可得a≡b(mod m)

引理2:剩余系定理5

若m为整数且m>1,a[1],a[2],a[3],a[4],…a[m]为m个整数,若在这m个数中任取2个整数对m不同余,则这m个整数对m构成完全剩余系.
证明:构造m的完全剩余系(0,1,2,…m-1),所有的整数必然这些整数中的1个对模m同余.取r[1]=0,r[2]=1,r[3]=2,r[4]=3,…r=i-1,1<i<=m.令(1):a[1]≡r[1](mod m)(顺序可以不同),因为只有在这种情况下才能保证集合{a1,a2,a3,a4,…am}中的任意2个数不同余,否则必然有2个数同余.由式(1)自然得到集合{a1,a2,a3,a4,…am}对m构成完全剩余系.

引理3:剩余系定理7
设m是一个整数,且m>1,b是一个整数且(m,b)=1.如果a1,a2,a3…am是模m的一个完全剩余系,则ba[1],ba[2],ba[3],ba[4],…ba[m]也构成模m的一个完全剩余系.
证明:若存在2个整数ba和ba[j]同余即ba≡ba[j](mod m),根据引理2则有a≡a[j](mod m).根据完全剩余系的定义和引理4(完全剩余系中任意2个数之间不同余,易证明)可知这是不可能的,因此不存在2个整数ba和ba[j]同余.由引理5可知ba[1],ba[2],ba[3],ba[4],…ba[m]构成模m的一个完全剩余系.

引理4:同余定理6
如果a,b,c,d是四个整数,且a≡b(mod m),c≡d(mod m),则有ac≡bd(mod m)
证明:由题设得ac≡bc(mod m),bc≡bd(mod m),由模运算的传递性可得ac≡bc(mod m)

二、证明过程:
构造素数p的完全剩余系P={1,2,3,4…(p-1)},因为(a, p)=1,由引理3可得A={a,2a,3a,4a,…(p-1)a}也是p的一个完全剩余系.令W=1*2*3*4…*(p-1),显然W≡W(mod p).令Y=a*2a*3a*4a*…(p-1)a,因为{a,2a,3a,4a,…(p-1)a}是p的完全剩余系,由引理2以及引理4可得a*2a*3a*…(p-1)a≡1*2*3*…(p-1)(mod p)即W*a^(p-1)≡W(modp).易知(W,p)=1,由引理1可知a^(p-1)≡1(mod
p)

补充:在p不是素数的情况下,我们也有类似的欧拉定理可以使用。欧拉函数是然后再有欧拉定理我们就可以得到乘法逆元。

欧拉定理:

一、准备知识:

欧拉函数:在数论中,对于正整数n,欧拉函数是小于n的数与n互质的数的数目。Φ(m)=m×П(pi-1)/pi

证明:先给出任意的正整数n=p1a[1]*p2a[2]*……*pka[k]

然后用容斥原理,首先从总数n中减去n/p1,n/p2,……n/pk的个数然后再加上同时是两个素因子的倍数的个数,再减去同时是三个素因子的倍数的个数……这样我们就可以得到一个公式:

现在有了公式,可是这个公式的时间复杂度是O(2k),所以我们需要对其进行化简,这步并不简单,但最后可以化简出         

二、证明

aφ(n) * x1 * x2 *... * xφ(n) mod n ≡ (a * x1) * (a * x2) * ... * (a * xφ(n)) mod n

≡ (a * x1 mod n) * (a * x2 mod n) * ... * (a * xφ(n) mod n) mod n
≡  x1 * x2 * ... * xφ(n) mod n
对比等式的左右两端,因为xi  (1 ≤ i ≤
φ(n)) 与 n 互质,所以 aφ(n) ≡  1 (mod n)

证明的东西到这里大概就结束了…………

下面来说一下时间复杂度。。。。。。。。

因为整数分解可以在O(√n)之内完成,所以对于某一个的欧拉函数也可以在O(√n)时间内求得。另外,我们可以利用埃氏筛法,每次发现质因子时就把它的倍数的欧拉函数乘上(p-1)/p,这样就可以一次性求出1-n的欧拉函数表了。

首先先说一种在O(√n)的时间内求出欧拉函数的值

 int euler_phi(int n){
int res=n;
for(int i=;i*i<=n;i++){
if(n%i==){
res=res/i*(i-);
for(;n%i==;n/=i);
}
}
if(n!=)res=res/n*(n-);
return res;
}

//O(n)时间筛出欧拉函数表

int n;
int euler[];
void euler_phi(){
for(int i=;i<=n;i++)euler[i]=i;
for(int i=;i<=n;i++){
if(euler[i]==i){
for(int j=i;j<=n;j+=i)euler[j]=euler[j]*(i-)/i;
}
}
}

费马小定理&欧拉定理的更多相关文章

  1. 学习:费马小定理 & 欧拉定理

    费马小定理 描述 若\(p\)为素数,\(a\in Z\),则有\(a^p\equiv a\pmod p\).如果\(p\nmid a\),则有\(a^{p-1}\equiv 1\pmod p\). ...

  2. 【初等数论】费马小定理&欧拉定理&扩展欧拉定理(暂不含证明)

    (不会证明--以后再说) 费马小定理 对于任意\(a,p \in N_+\),有 \(a^{p-1} \equiv 1\pmod {p}\) 推论: \(a^{-1} \equiv a^{p-2} \ ...

  3. 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,“至少”一词可以给我们提示,我们可以枚举 ...

  4. 【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}

    题意:求奇质数 P 的原根个数.若 x 是 P 的原根,那么 x^k (k=1~p-1) 模 P 为1~p-1,且互不相同. (3≤ P<65536) 解法:有费马小定理:若 p 是质数,x^( ...

  5. hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925

    首先,我们珂以抽象出S函数的模型:把n拆成k个正整数,有多少种方案? 答案是C(n-1,k-1). 然后发现我们要求的是一段连续的函数值,仔细思考,并根据组合数的性质,我们珂以发现实际上答案就是在让求 ...

  6. 费马小定理 x

    费马小定理(Fermat Theory) 是数论中的一个重要定理,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p).即:假如a是整数,p是质数,且a,p互质(即两 ...

  7. hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                  ...

  8. nyoj1000_快速幂_费马小定理

    又见斐波那契数列 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列 ...

  9. poj 3734 Blocks 快速幂+费马小定理+组合数学

    题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...

随机推荐

  1. (原)torch的训练过程

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221622.html 参考网址: http://ju.outofmemory.cn/entry/284 ...

  2. css3中的提供的元素变化属性

    通过 CSS3 提供的2d元素转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. css3中为我们 提供了: translate() rotate() scale() skew() matrix( ...

  3. WDCP控制面板的常用liunx命令集

    WDCP是在linux下的一款常用的服务器可视化管理面板,是新手使用linux搭建网站的福音.本文不过多的介绍WDCP是什么,如果需要了解的话,可以至WDCP官方介绍页面查看. 今天博主准备查看网站系 ...

  4. BufferedInputStream

    package file; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStrea ...

  5. 【好程序员笔记分享】——UIView与CALayer详解

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ UIView与CALayer详解 研究Core Animation已经有段时间了,关于Core Animati ...

  6. 安装JDK+Tomcat,进行环境变量设置,和运行JSP

    系统:windows 7 64-bit 安装前需要用到的软件 JDK7u21 Tomcat 8.0 下载64-bit Windows zip就好 安装JDK7u21 和平常安装软件一样,路径也不要动, ...

  7. 有关WCF的契约问题

    WCF中的契约包括4种 数据契约 DataContract ->DataMember 服务契约 ServiceContract-> OperactionContract 消息契约 Mess ...

  8. Day56

    今天干啦啥呢 早上七点起来 天气冷了真起不来啊 再坚持坚持就好了 今天上午九点开始考数据库 我去 大学四年第一次感觉到这样的爽  作弊的爽啊 也没有完全的作弊啦 是开卷考试,反正做的很顺利了. 我和胡 ...

  9. 第29讲 UI组件之 ListView与 BaseAdapter,SimpleAdapter

    第29讲 UI组件之 ListView与 BaseAdapter,SimpleAdapter 1.BaseAdapter BaseAdapter是Android应用程序中经常用到的基础数据适配器,它的 ...

  10. Fiddler 抓取eclipse中的请求

    Fiddler 抓取eclipse中的请求 代码中添加 System.setProperty("http.proxySet", "true"); System. ...