各种数论定理

来源:互联网 发布:caffe实现fcn 编辑:程序博客网 时间:2024/05/24 00:01

小技巧
当算某个数的阶乘或者算很大的次方的时候,可以将数字转换为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+m1可以将m个盒子想象为m-1块隔板,最后和那个球放在一起就是n+m-1个,然后就是隔板的选法Cm1n+m1和前面的选法是相同的。
当不能有空盒时先给每一个盒子内放1个然后剩下的小球按照上面的方法方就好了

排列组合公式
Cmn=Cnmn=Cm1n1+Cmn1
C0n+C1n+C2n+…+Cnn=2n
Crn+Cr+1n=Cr+1n+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 ,当n&m==m成立时可以判断Cmn是奇数。

一个数的所有约数(包括自己)的欧拉函数之和,等于这个数本身的值
根据日期计算星期几

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.威尔逊定理
(p1)!1modp,p为质数。
2.欧拉定理
phi(n),小于n和n互素的数字个数。
在 [1,n] 中与 n 互素的数的和为:phi(n)n2
3.费马小定理
a(p1)1modp,p是质数,且p不能整除a。
4.费马大定理
当整数n >2时,关于x, y, z的方程 xn+yn=zn 没有正整数解。

从0开始每次跳a步,上限是m-1,可以无限次的跳,则跳过得值是gcd(m,a)的倍数

持续更新中………

原创粉丝点击