数论四大定理(欧拉定理、费马小定理、中国剩余定理、威尔逊定理)
前置知识
同余
假设 a,ba,ba,b 都是整数,如果 nnn 是一个正整数,且存在整数 kkk 使得 a−b=k×na−b=k \times na−b=k×n,则称 a,ba,ba,b 模 nnn 同余,记作 a≡b(modn)a \equiv b \pmod {n}a≡b(modn)。
逆元
a⋅a−1≡1modpa \cdot a^{−1} \equiv1 \mod pa⋅a−1≡1modp,其中 gcd(a,p)=1\gcd(a,p)=1gcd(a,p)=1 。也就是说 aaa 与 ppp 互质,a−1a^{-1}a−1 就是逆元。
数论四大定理
欧拉定理
费马小定理
中国剩余定理
威尔逊定理
欧拉定理
对任意两个正整数 a,na, na,n,如果两者互质,那么 aφ(n)≡1(modn)a^{\varphi (n)} ≡ 1 \space \pmod{n}aφ(n)≡1 (modn)。
其中欧拉函数通式:φ(n)=n×(1−1p1)×(1−1p2)×(1−1p3)×(1−1p4)×⋯×(1−1pn)φ(n)=n \times (1-\dfrac{1}{p_1}) \times (1-\dfrac{1}{p_2}) \times (1-\dfrac{1}{p_3}) \times (1-\dfrac{1}{p_4}) \times \cdots \times (1-\dfrac{1}{p_n})φ(n)=n×(1−p11)×(1−p21)×(1−p31)×(1−p41)×⋯×(1−pn1)。
ppp 为 nnn 的质因数,nnn 是不为 000 的正整数,φ(1)=1\varphi(1)=1φ(1)=1。
质数的 φ\varphiφ 为自己减 111,例如 φ(2)=1\varphi(2)=1φ(2)=1。
费马小定理
若存在整数 a,pa,pa,p,aaa 为整数,ppp 为质数,那么 ap−1≡1(modp)a^{p-1} \equiv 1 \space \pmod{p}ap−1≡1 (modp)
费马小定理是欧拉定理的一种特殊情况(当 nnn 为质数时 φ(n)\varphi(n)φ(n) 为 n−1n-1n−1)
应用
已知斐波那契数列 f[N]=f[N-1]+f[N-2]\texttt{f[N]=f[N-1]+f[N-2]}f[N]=f[N-1]+f[N-2],且有 f[1]=f[2]=1\texttt{f[1]=f[2]=1}f[1]=f[2]=1,给定正整数 xxx 和 NNN,求xf[N]mod100003x^{\texttt{f[N]}} \mod 100003xf[N]mod100003的值。
数据范围:1≤x,N≤1e51 \le x,N \le 1\mathrm{e}51≤x,N≤1e5
解题思路
既然最后要对 100003100003100003 求余,那么我们不如要想个办法,找到和“离谱数”同余的一个数。
根据欧拉定理可知,当 xxx 与 mmm 互质的时候,xφ(m)≡1(modm)x^{\varphi(m)} \equiv 1 \space \pmod{m}xφ(m)≡1 (modm)。因为100003为质数,所以 φ(100003)=100003−1=100002\varphi(100003)=100003-1=100002φ(100003)=100003−1=100002。
因此我们在进行斐波那契数列计算的时候就可以让每一个数都模 100002100002100002,再在快速幂的过程中每次都模 100003100003100003 就可以了。
代码
#include<iostream>
#define N 100005
#define MOD 100003
#define ll long long
using namespace std;
ll f[N];
long long ksm(ll x,ll k){ll ans=1;while(k){if(k&1){ans=ans*x%MOD;}k>>=1;x=(x*x)%MOD;}return ans;
}
ll x,n;
int main(){f[1]=f[2]=1;for(int i=3;i<=N;i++){f[i]=(f[i-1]+f[i-2])%(MOD-1);}cin>>x>>n;cout<<ksm(x,f[n])<<endl;return 0;
}
中国剩余定理(CRT)
设正整数 m1,m2,⋯,mkm_1,m_2,\cdots,m_km1,m2,⋯,mk 两两互素,则同余方程组:
{x≡a1(modm1)x≡a2(modm2)x≡a3(modm3)⋮x≡ak(modmk)\begin{cases} x \equiv a_1 \pmod {m_1} \\ x \equiv a_2 \pmod {m_2} \\ x \equiv a_3 \pmod {m_3} \\ \space \space \space \space \vdots \\ x \equiv a_k \pmod {m_k} \end{cases} ⎩⎨⎧x≡a1(modm1)x≡a2(modm2)x≡a3(modm3) ⋮x≡ak(modmk)
有整数解。并且在 modM=m1×m2×⋯×mk\mathrm{mod}\space M=m_1 \times m_2 \times \cdots \times m_kmod M=m1×m2×⋯×mk 下的解是唯一的。
解为 x=(a1M1M1−1+a2M2M2−1+⋯+akMkMk−1)modMx = (a_1 M_1 M_{1}^{-1} + a_2 M_2 M_{2}^{-1} + \cdots + a_k M_k M_{k}^{-1}) \bmod Mx=(a1M1M1−1+a2M2M2−1+⋯+akMkMk−1)modM
其中:Mi=MmiM_i=\dfrac{M}{m_i}Mi=miM,Mi−1M_{i}^{-1}Mi−1 为 MimodmiM_i \bmod m_iMimodmi 的逆元。
应用:生物节律(POJ 1006)
题目传送门
人有生理周期、情绪周期和智力周期,它们的周期长度分别为 23、28 和 33 天。一个周期的每个周期都有一个峰值。由于三个周期的周期不同,因此三个周期的峰值一般出现在不同的时间。
你的任务是确定从给定日期到下一个三重峰的天数。给定日期不计算在内。
输入由一行四个整数 ppp、eee、iii 和 ddd 组成。ppp、eee 和 iii 的值分别是从当年年初开始的身体、情绪和智力周期达到峰值的天数。值 ddd 是给定的日期,可以小于 ppp、eee 或 iii 中的任何一个。所有值都是非负数,最多为 365,假设在给定日期后的 21252 天内将出现三重峰。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 21252
int main()
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 21252
int main(){ int p,e,i,d,ca=1; while(1){ cin>>p>>e>>i>>d; if(p+e+i+d==-4) break; const int r1=23,r2=28,r3=33; int re1=r2*r3,re2=r1*r3,re3=r1*r2,re=r1*r2*r3; int res1=re1,res2=re2,res3=re3; while(res1%r1!=1)res1+=re1; while(res2%r2!=1)res2+=re2; while(res3%r3!=1)res3+=re3; res1*=p;res2*=e;res3*=i; int k=re; while(res1+res2+res3>k){ k+=re; } k-=re; int t=(res1+res2+res3-k-d+21252)%21252;//可能出现负数 故加之后再取余! if(t==0) printf("Case %d: the next triple peak occurs in %d days.\n",ca++,21252); elseprintf("Case %d: the next triple peak occurs in %d days.\n",ca++,t); } return 0;
}
威尔逊定理
在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。
即:
当 ppp 为质数时,(p−1)!+1(p-1)!+1(p−1)!+1 能被 ppp 整除。
用同余方程表示为:(p−1)!≡−1(modp)(p−1)! \equiv −1 \pmod p (p−1)!≡−1(modp)是素数的充分必要条件。
应用 1
给定一个正整数 nnn,求 (n−1)!modn(n-1)! \mod n(n−1)!modn 的值。
数据范围:2≤n≤1e92 \le n \le 1 \mathrm{e} 92≤n≤1e9
解题思路
考虑 nnn 为质数与不为质数两种情况:
当 nnn 为素数时,这个就是威尔逊定理,答案为 n−1n-1n−1;
当 nnn 不为素数时,我们在证明威尔逊定理的充分性时,已经对它进行了一个分类,当 n=4n=4n=4 时,结果为 222;否则,可以根据完全平方数和非完全平方数,均得到结果为 000。
应用 2:YAPTCHA(HDU 2973)
题目传送门
ttt 次询问,每次给定 nnn 的值,用下面的公式求 SnS_nSn,公式中的 [][][] 指的是向下取整。
数据范围:t≤1e6,1≤n≤1e6t \le 1 \mathrm{e} 6,1 \le n \le 1 \mathrm{e} 6t≤1e6,1≤n≤1e6
解题思路
看到(n−1)!+1n−[(n−1)!n]\dfrac{(n-1)!+1}{n}-[\dfrac{(n-1)!}{n}]n(n−1)!+1−[n(n−1)!]的形式,就应该联想到威尔逊定理。
根据 3k+73k+73k+7 的性质分别计算。
当 3k+73k+73k+7 是质数时,根据威尔逊定理,(3k+6)!≡−1mod(3k+7)(3k+6)!≡−1 mod (3k+7)(3k+6)!≡−1mod(3k+7),即 (3k+6)!+1(3k+6)!+1(3k+6)!+1 能够被 3k+73k+73k+7 整除。
所以设 (3k+6)!+13k+7\dfrac{(3k+6)!+1}{3k+7}3k+7(3k+6)!+1 为x,则式子变为⌊x−⌊x−13k+7⌋⌋=1⌊x−⌊x−\dfrac{1}{3k+7}⌋⌋=1⌊x−⌊x−3k+71⌋⌋=1
当 3k+73k+73k+7 不是质数时,k≤1k \le 1k≤1,所以 3k+7>43k+7>43k+7>4,根据威尔逊定理的充
分条件证明,有 (3k+6)!≡0(mod3k+7)(3k+6)!\equiv 0 \pmod{3k+7}(3k+6)!≡0(mod3k+7),即 (3k+6)!3k+7\dfrac{(3k+6)!}{3k+7}3k+7(3k+6)! 一定是整数。
设 (3k+6)!3k+7\dfrac{(3k+6)!}{3k+7}3k+7(3k+6)! 为 xxx,则 ⌊⌊x+13k+7⌋−x⌋=0⌊⌊x+\dfrac{1}{3}k+7⌋−x⌋=0⌊⌊x+31k+7⌋−x⌋=0。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=3000010;
int p[maxn],vis[maxn],ans[maxn],cnt;
void solve()
{vis[1]=1;for(int i=2;i<maxn;i++){if(!vis[i]) p[++cnt]=i;for(int j=1;j<=cnt&&p[j]*i<maxn;j++){vis[i*p[j]]=1;if(!(i%p[j])) break;}}
}
int main() {solve();int T,N; scanf("%d",&T);for(int i=1;i<=1000000;i++) ans[i]=ans[i-1]+(!vis[3*i+7]);while(T--){scanf("%d",&N);printf("%d\n",ans[N]);}return 0;
}
数论四大定理(欧拉定理、费马小定理、中国剩余定理、威尔逊定理)相关推荐
- 初等数论四大定理(威尔逊定理,欧拉定理,费马小定理,中国剩余定理)
初等数论四大定理 1. 威尔逊定理 (1) 结论 当且仅当ppp为素数时,(p−1)!≡−1(modp)(p-1)!\equiv -1(\mod p)(p−1)!≡−1(modp). (2) 证明 充 ...
- 初等数论四大定理(威尔逊定理,欧拉定理,中国剩余定理,费马小定理)
1.威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.即:当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于 ...
- 算法 {欧拉函数,欧拉定理,费马小定理}
欧拉函数 定义 ϕ ( x ) , x ∈ N + \phi(x), \ \ x \in N^+ ϕ(x), x∈N+ means the number of y ∈ N + y \in N^+ y ...
- 初等数论四大定理之——费马小定理
皮埃尔·德·费马(Pierre de Fermat),1601年生于法国,是一个律师和业余数学家.他在数学多个分支上都有贡献,成就甚至超过了许多职业的数学家,被誉为"业余数学家之王" ...
- 欧拉定理 费马小定理
前言 学基础数论的时候看过证明,然而很快就忘了,最近在学习高深一点的数论,于是再复习一下欧拉定理和费马小定理. 欧拉定理 内容 若正整数 \(a,n\) 互质,则 \(a^{\varphi(n)}\e ...
- 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)...
http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,"至少"一词可以给我 ...
- 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明
一.威尔逊定理 若p为质数,则 p|(p-1)!+1 亦:(p-1)! ≡ p-1 ≡ -1(mod p) 例题: HDU 2973 YAPTCHA (威尔逊定理及其逆定理) 解题报告见http:// ...
- 剩余系,剩余定理,同余定理,费马小定理的证明
费马小定理: 证明:假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p) 一.准备知识: 所谓"剩余系",就是指对于某一个特定的正整数n,一个整数集中的数模n所 ...
- 同余定理 逆元 中国剩余定理 费马小定理
同余定理 同余定理是数论中的重要概念.给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m). 两个整数a ...
最新文章
- 解析IBM TSM6.0版本特色功能与技术优势
- pjsip学习笔记二
- 打印session cookie
- PE学习(五)导出表,编写DLL及查看DLL的导出信息
- 于python保留字的是_《于》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
- 大数据 java 代码示例_Java变量类型与示例
- [NOI2013]树的计数
- Huffman编码解码
- 十年后,若中国基建基本完成了,还有什么能大规模拉动经济?
- WP7 剪贴板 Clipboard
- wpf 客户端 添加qq客服咨询
- 触宝输入法+android,触宝输入法国际版
- linux ftp 测网速,武汉电信使用FTP测试网速
- 【数字信号处理】基于DFT的滤波系列4之加窗(含MATLAB代码)
- 百宝云Post与Get事件教程
- mt2503 [ShapeEngine]泰语音标字符发生偏移
- wath修改data中的值后更新
- python回测代码_python实现马丁策略回测3000只股票的实例代码
- 现在捡芝麻都需要有见识吗?
- 吴恩达《机器学习系列课程》学习笔记(一)
热门文章
- Lenovo X240/250锁定 Fn 键时 End 键工作不正常
- 论文阅读CVPR2022 《Language As Queries for Referring Video Object Segmentation》
- 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)
- 真正的理解是什么? 会用啊
- Ubuntu 加入开机自启动命令(rc.local)
- 【调剂】东南大学无锡校区2020年相关专业调剂信息
- 老人机侧键keypad流程
- windows配置NGINX、NGINX配置SSL证书通过HTTPS访问、使用HTTPS通过NGINX代理访问服务器端项目
- python画柱状图和折线图
- 广告传媒行业网络覆盖整体解决方案.