小技巧
当算某个数的阶乘或者算很大的次方的时候,可以将数字转换为10^n的进制表示方法(比如1000进制或者10000进制),这样出来点的数字和原答案是一样的,只不过在一个数组的一个元素中多存了几位。
约数个数定理
首先,n可以分解质因数:n=p1^a1×p2^a2×p3^a3*…*pk^ak,
由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2……p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个……pk^ak的约数有(ak+1)个。
故根据乘法原理:n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1)。
欧拉函数
通式:
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。
约数和定理
对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
则由约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个,
那么n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)个正约数的和为
f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)
求1~n的最小公倍数**
从1开始记录到达当前值的最小公倍数,如果前一个的最小公倍数能整除当前值,则最小公倍数不变,否则*当前值除过1之外的最小约数,因为到当前值为止,假设到n了,m是n的最小约数(除了1),则n/m肯定在前面出现过,又要求最小公倍数,所以当前的最小公倍数是,抢一个的最小公倍数*m。
数论线性筛法总结
包括素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛。
费马平方和定理
奇质数能表示为两个平方数之和的充分必要条件是该质数%4==1及4k+1的形式。
拉格朗日四平方和定理
每个正整数均可表示为4个整数的平方和。
m个不同的盒子内放入n个相同的小球的方案数(可以有空盒)
Cnn+m−1
C
n
+
m
−
1
n
可以将m个盒子想象为m-1块隔板,最后和那个球放在一起就是n+m-1个,然后就是隔板的选法
Cm−1n+m−1
C
n
+
m
−
1
m
−
1
和前面的选法是相同的。
当不能有空盒时先给每一个盒子内放1个然后剩下的小球按照上面的方法方就好了
排列组合公式
Cmn
C
n
m
=
Cn−mn
C
n
n
−
m
=
Cm−1n−1
C
n
−
1
m
−
1
+
Cmn−1
C
n
−
1
m
C0n
C
n
0
+
C1n
C
n
1
+
C2n
C
n
2
+…+
Cnn
C
n
n
=
2n
2
n
Crn
C
n
r
+
Cr+1n
C
n
r
+
1
=
Cr+1n+1
C
n
+
1
r
+
1
Cnn
C
n
n
+
Cnn+1
C
n
+
1
n
+
Cnn+2
C
n
+
2
n
+…+
Cnn+m
C
n
+
m
n
=
Cn+1n+m+1
C
n
+
m
+
1
n
+
1
新方法打逆元表
void init() {
F[0] = 1;
for(int i = 1; i < MX; i++) {
F[i] = (F[i - 1] * i) % mod;
}
invF[MX - 1] = power(F[MX - 1], mod - 2);
for(int i = MX - 2; i >= 0; i--) {
invF[i] = invF[i + 1] * (i + 1) % mod;
}
}
从1到n所有值的异或值
if n % 4 == 0值为n
if n % 4 == 1值为1
if n % 4 == 2值为n+1
if n % 4 == 3值为0
unsigned xor_n(unsigned n)
{
unsigned t = n & 3;
if (t & 1) return t / 2u ^ 1;
return t / 2u ^ n;
}
杨辉三角
第n行第m个数是
Cmn
C
n
m
,当n&m==m成立时可以判断
Cmn
C
n
m
是奇数。
一个数的所有约数(包括自己)的欧拉函数之和,等于这个数本身的值
根据日期计算星期几
int judge(int y,int m,int d)//返回星期几
{
if(m==1||m==2)
{
m+=12;
y--;
}
return ((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7)+1;
}
k1和k2互素,结论是k1*k2和k1+k2也是互素的。
错排公式
ans[1]=0;
ans[2]=1;
ans[3]=2;
for(int i=4;i<=20;i++)
ans[i]=(i-1)*(ans[i-1]+ans[i-2]);
四大定理
1.威尔逊定理
(p−1)!≡−1modp
(
p
−
1
)
!
≡
−
1
mod
p
,p为质数。
2.欧拉定理
phi(n),小于n和n互素的数字个数。
在 [1,n] 中与 n 互素的数的和为:
phi(n)∗n2
p
h
i
(
n
)
∗
n
2
3.费马小定理
a(p−1)≡1modp
a
(
p
−
1
)
≡
1
mod
p
,p是质数,且p不能整除a。
4.费马大定理
当整数n >2时,关于x, y, z的方程
xn+yn=zn
x
n
+
y
n
=
z
n
没有正整数解。
从0开始每次跳a步,上限是m-1,可以无限次的跳,则跳过得值是gcd(m,a)的倍数
持续更新中………