小技巧
當算某個數的階乘或者算很大的次方的時候,可以將數字轉換爲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個相同的小球的方案數(可以有空盒)
可以將m個盒子想象爲m-1塊隔板,最後和那個球放在一起就是n+m-1個,然後就是隔板的選法 和前面的選法是相同的。
當不能有空盒時先給每一個盒子內放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個數是 ,當n&m==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爲質數。
2.歐拉定理
phi(n),小於n和n互素的數字個數。
在 [1,n] 中與 n 互素的數的和爲:
3.費馬小定理
,p是質數,且p不能整除a。
4.費馬大定理
當整數n >2時,關於x, y, z的方程 沒有正整數解。
從0開始每次跳a步,上限是m-1,可以無限次的跳,則跳過得值是gcd(m,a)的倍數
持續更新中………