1.同余定理
同余定理是数论中的重要概念。给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)
。
1.1证明
充分性: 若a和b用m相除留下相同的余数r,则 a=q1m+r
, b=q2m+r
,q1和q2为某两个整数,由此的a-b=(q1m+r)-(q2m-r)=m(q1-q2)
,根据整除定义,我们有m|(a-b)
,由同余式定义得出结论:a≡b(mod m)
必要性: 若a和b用m相除留下相同的余数r,则 a=q1m+r
,b=q2m+r
,所以a-b=m(q1-q2)
故 m|(a-b)
。
1.2同余性质
- 反身性:a≡a (mod m)
- 对称性: 若a≡b(mod m),则b≡a(mod m)
- 传递性: 若a≡b(mod m),b≡c(mod m),则a≡c(mod m)
- 同余式相加:若a≡b(mod m),b≡c(mod m),则a ± c≡b ± d(mod m)
- 同余式相乘:若a≡b(mod m),b≡c(mod m),则ac≡bd(mod m)
- 线性运算:如果a≡b(mod m),c≡d(mod m),那么a ± c≡b ± d(mod m),且
a * c≡b * d(mod m)
- 除法:若ac ≡ bc (mod m) c≠0 则 a≡ b (mod m/gcd(c,m)) 其中gcd(c,m)表示c,m的最大公约数。特殊地 ,gcd(c,m)=1 则a ≡ b (mod m)
- 幂运算:如果a ≡ b (mod m),那么a^n ≡ b^n (mod m)
- 若a ≡ b (mod m),n|m,则 a ≡ b (mod n)
- 若a ≡ b (mod mi) (i=1,2…n) 则 a ≡ b (mod [m1,m2,…mn]) 其中[m1,m2,…mn]表示m1,m2,…mn的最小公倍数.
2.欧拉定理
在数论中,欧拉定理(也称费马-欧拉定理或欧拉
2.1欧拉函数
假若
然后欧拉予以一般化:
假若
其中
假若
2.1.1欧拉函数的值
若
则
欧拉函数的求法,Euler(A)=A(1-1/p1)(1-1/p2)….(1-1/pn)。(p为A的分解质因数中的不同的质因数)
其中
2.1.1.1欧拉函数c++实现
1.对于素数A,有Euler(A)=A(1-1/A)=A-1。(A有且只有一个质因子,它自己) 2.如果对于任意数A和素数p,有A%p==0,那么Euler(A*p)=p*Euler(A)。(证明:设A的质因子为p,P1,P2,..Pn,那么A*p的质因子也一定是p,P1,P2,..Pn,所以Euler(A)=A\(1-1/p)(1-1/P1)…(1-1/Pn),Euler(A*p)=A*p(1-1/p)(1-1/P1)…(1-1/Pn),所以Euler(A*p)=Euler(A)*p。) 3.如果对于任意数A和素数p,有A%p!=0,那么A与p互素,所以Euler(A*p)=Euler(A)*Euler(p)=Euler(A)(p-1)。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int euler(int n) {
int res = n;
for (int i = 2; i*i <= n; i++) {
if (n % i == 0) {
n /= i;
res = res - res / i;
}
while (n % i == 0)
n /= i;
}
if(n>1)
res =res - res/n;
return res;
}
int main(){
int n;
while(cin>>n)
cout<<euler(n)<<endl;
return 0;
}
3.费马小定理
费马小定理是数论中的一个定理:假如
如果a不是p的倍数,这个定理也可以写成
这个书写方式更加常用。
4.中国剩余定理
用现代数学的语言来说明的话,中国剩余定理给出了以下的一元线性同余方程组:
有解的判定条件,并用构造法给出了在有解情况下解的具体形式。 中国剩余定理说明:假设整数m1, m2, … , mn其中任两数互质,则对任意的整数:a1, a2, … , an,方程组
- 设是整数m1, m2, … , mn的乘积,并设M = m_1 \times m_2 \times \cdots \times m_n = \prod_{i=1}^n m_i),即M_i = M/m_i, \; \; \forall i \in \{1, 2, \cdots , n\}是除了mi以外的n − 1个整数的乘积。M_{i}
- 设)为t_i = M_i^{-1})模M_{i})的数论倒数:m_{i}t_i M_i \equiv 1 \pmod {m_i}, \; \; \forall i \in \{1, 2, \cdots , n\}.
- 方程组的通解形式为:(S)在模x = a_1 t_1 M_1 + a_2 t_2 M_2 + \cdots + a_n t_n M_n + k M= k M + \sum_{i=1}^n a_i t_i M_i, \quad k \in \mathbb{Z}.)的意义下,方程组M只有一个解:(S)。x = \sum_{i=1}^n a_i t_i M_i.