数论

数论

第一节:快速乘法

ll CF(ll a,ll b,ll p)

{

a%=p,b%=p;

ll ans=0;

do{

if(a&1)

(ans+=b)%=p;

(b*=2)%=p;

}while(a>>=1);

return ans;

}

第二节:快速幂

int Pow(int a,int b)

{

int ans=1;

do{

if(b&1)

ans*=a;

a*=a;

}while(b>>=1);

return ans;

}

第三节:线性筛素数

for(i=2;i<m;i++)

    {

        if(!a[i]) prime[num_prime++]=i;

        for(j=0;j<num_prime && i*prime[j]<m;j++)

        {

           a[i*prime[j]]=1;合数标为1,同时,prime[j]是合数i*prime[j]的最小素因子

           if(!(i%prime[j]))  break;

即比一个合数大的质数和该合数的乘积可用

一个更大的合数和比其小的质数相乘得到

        }

}

第四节:排列组合

可重排列:n^m

不可重排列:n!/(n-m)!

组合:n!/((n-m)!*m!)

组合数线性递推:C(n,i)=C(n,i-1)*(n-i+1)/i;

组合数求和:C(n,0)+C(n,1)+C(n,2)++C (n,n)=2^n

原文地址:https://www.cnblogs.com/SeanOcean/p/10975724.html