前置知识

同余

假设 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−p1​1​)×(1−p2​1​)×(1−p3​1​)×(1−p4​1​)×⋯×(1−pn​1​)。

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=(a1​M1​M1−1​+a2​M2​M2−1​+⋯+ak​Mk​Mk−1​)modM

其中:Mi=MmiM_i=\dfrac{M}{m_i}Mi​=mi​M​,Mi−1M_{i}^{-1}Mi−1​ 为 MimodmiM_i \bmod m_iMi​modmi​ 的逆元。

应用:生物节律(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+31​k+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. 威尔逊定理 (1) 结论 当且仅当ppp为素数时,(p−1)!≡−1(modp)(p-1)!\equiv -1(\mod p)(p−1)!≡−1(modp). (2) 证明 充 ...

  2. 初等数论四大定理(威尔逊定理,欧拉定理,中国剩余定理,费马小定理)

    1.威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.即:当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于 ...

  3. 算法 {欧拉函数,欧拉定理,费马小定理}

    欧拉函数 定义 ϕ ( x ) , x ∈ N + \phi(x), \ \ x \in N^+ ϕ(x),  x∈N+ means the number of y ∈ N + y \in N^+ y ...

  4. 初等数论四大定理之——费马小定理

    皮埃尔·德·费马(Pierre de Fermat),1601年生于法国,是一个律师和业余数学家.他在数学多个分支上都有贡献,成就甚至超过了许多职业的数学家,被誉为"业余数学家之王" ...

  5. 欧拉定理 费马小定理

    前言 学基础数论的时候看过证明,然而很快就忘了,最近在学习高深一点的数论,于是再复习一下欧拉定理和费马小定理. 欧拉定理 内容 若正整数 \(a,n\) 互质,则 \(a^{\varphi(n)}\e ...

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

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

  7. 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明

    一.威尔逊定理 若p为质数,则 p|(p-1)!+1 亦:(p-1)! ≡ p-1 ≡ -1(mod p) 例题: HDU 2973 YAPTCHA (威尔逊定理及其逆定理) 解题报告见http:// ...

  8. 剩余系,剩余定理,同余定理,费马小定理的证明

    费马小定理: 证明:假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p) 一.准备知识: 所谓"剩余系",就是指对于某一个特定的正整数n,一个整数集中的数模n所 ...

  9. 同余定理 逆元 中国剩余定理 费马小定理

    同余定理 同余定理是数论中的重要概念.给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m). 两个整数a ...

最新文章

  1. 解析IBM TSM6.0版本特色功能与技术优势
  2. pjsip学习笔记二
  3. 打印session cookie
  4. PE学习(五)导出表,编写DLL及查看DLL的导出信息
  5. 于python保留字的是_《于》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  6. 大数据 java 代码示例_Java变量类型与示例
  7. [NOI2013]树的计数
  8. Huffman编码解码
  9. 十年后,若中国基建基本完成了,还有什么能大规模拉动经济?
  10. WP7 剪贴板 Clipboard
  11. wpf 客户端 添加qq客服咨询
  12. 触宝输入法+android,触宝输入法国际版
  13. linux ftp 测网速,武汉电信使用FTP测试网速
  14. 【数字信号处理】基于DFT的滤波系列4之加窗(含MATLAB代码)
  15. 百宝云Post与Get事件教程
  16. mt2503 [ShapeEngine]泰语音标字符发生偏移
  17. wath修改data中的值后更新
  18. python回测代码_python实现马丁策略回测3000只股票的实例代码
  19. 现在捡芝麻都需要有见识吗?
  20. 吴恩达《机器学习系列课程》学习笔记(一)

热门文章

  1. Lenovo X240/250锁定 Fn 键时 End 键工作不正常
  2. 论文阅读CVPR2022 《Language As Queries for Referring Video Object Segmentation》
  3. 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)
  4. 真正的理解是什么? 会用啊
  5. Ubuntu 加入开机自启动命令(rc.local)
  6. 【调剂】东南大学无锡校区2020年相关专业调剂信息
  7. 老人机侧键keypad流程
  8. windows配置NGINX、NGINX配置SSL证书通过HTTPS访问、使用HTTPS通过NGINX代理访问服务器端项目
  9. python画柱状图和折线图
  10. 广告传媒行业网络覆盖整体解决方案.