同模取余
基本性质
a≡b(modn);
a+k∗b=n;
n|a−b;
a≡b(modn);d|n;
a≡b(modd);
a≡b(modn);d|(a,b,n)
ad≡bd(modnd);
a≡b(modn);
(c,n)=1;
a∗c≡b∗c(modn);
a1≡b1(modn);a2≡b2(modn);
a1+a2≡b1+b2(modn);
a1∗a2≡b1∗b2(modn);
a≡b(modp); a≡b(modq);(p,q为不同素数)
a≡b(modp∗q);
费马小定理
ap−1≡1(modp);(p为素数,(a,p)=1);
证明
P={1,2,3,…,p−1};
(a,p)=1;
A={a,2∗a,3∗a,…,(p−1)∗a};
(p−1)≡a∗2a∗3a∗(p−1)a(modp);
(p−1)≡ap−1∗(p−1)(modp);
∵((p−1),p)=1;
∴ap−1≡1(modp);
除法逆元
ab≡a∗bp−2(modp);(p为素数,(b,p)=1);
B∗b≡1(modp);
∵ap−1≡1(modp),(p为素数,(a,p)=1);
∴B=bp−2;
威尔逊定理
(p−1)≡−1(modp),(p为素数);
证明
若p=2; 显然成立;
若p>2;
对于所有的整数1≤a≤(p−1),存在1≤a1≤(p−1),使
得:
a∗a1≡1(modp);
当a=a1;
即a2≡1(modp);
a=1 或 a=p−1;
即:
欧拉函数
m是一个正整数,
若m=pα,φ(m)=pα−pα−1;
φ(m)=m∏p|m(1−1p);
性质
φ(p∗q)=φ(p)∗φ(q);((p,q)=1)
φ(2∗q)=φ(q);(q为素数);
小于n与n互素的正整数的和:
sum=n∗φ(n)2;
直接求欧拉值\打标
int get_Euler(int n) //直接求值 euler(n) = n * (1 - 1/p1) * (1 - 1/p2)*...*;
{
int tmp = n, ans = n;
for (int i = 2; i * i <= tmp; i++)
{
if (tmp % i == 0)
{
ans = ans / i * (i - 1);
while (tmp % i == 0)
{
tmp /= i;
}
}
}
if (tmp > 1)
{
ans = ans / tmp * (tmp - 1);
}
return ans;
}
int euler[N];
void init_Euler() //打表
{
euler[1] = 1;
for (int i = 2; i < N; i++)
{
euler[i] = i;
}
for (int i = 2; i < N; i++)
{
if (euler[i] == i)
{
for (int j = i; j < N; j += i)
{
euler[j] = euler[j] / i * (i - 1);
}
}
}
}