标签:欧拉定理 i+1 note ceil 排列 AC 矩阵乘法 lin 约数
假如a是一个整数,b是一个素数,\(gcd(a,p)=1\),则
\(a^{p-1}\equiv1(mod(p))\)
应用:
质数逆元:\(\frac{1}{a}mod (p)=a^(p-2)mod(p)\)
若\(n,a\)为正整数,且\(n,a\)互质,则
\(a^{\phi(n)}\equiv 1(mod(n))\)
费马小定理是欧拉定理的特殊情况,因为\(n\)为素数时,\(\phi(n)=n-1\)。
拓欧降次:
求解\(a\equiv 1(mod(q)),x>0\)
则x解集为\(\phi(q)\)的约数与倍数。
给定\(a,p(p>1),gcd(a,p)=1\),求\(a\)在模\(p\)意义下的逆元。
用Exgcd解方程\(ax\equiv 1(mod(p))\)
即\(ax+by=1\)
int exgcd(int a,int b,int &d,int &x,int &y)
{
if(!b) x=1,y=0,d=a;
else exgcd(b,a%b,d,y,x),y-=x*(a/b);
}
{
re int a;
exgcd(i,p,g,x,y);
while(x<0) x+=p;
printf("%d\n",x);
}
线性求解
\(inv[i]=(p-p/i)*inv[p\%i]\)
struct matrix{
int a[100][100];
matrix()
{
memset(a,0,sizeof(a));
}
int * operator [](int x)
{
return a[x];
}
matrix operator *(matrix b)
{
matrix c;
for(int i=0;i<l;i++)
for(int j=0;j<l;j++)
for(int k=0;k<l;k++)
c[i][k]=(c[i][k]+1ll*a[i][j]*b[j][k])%w;
return c;
}
}S,T;
[专题总结][1]
\(S^n_m\)表示斯特林数。(把\(m\)个有区别物品放到\(n\)个无区别篮子,且篮子不空的方案数)
\(S_m^n=S_m^{n-1}*m+S_{m-1}^{n-1}\)
\(S_m^n=0(m>n)\)
有\(k\)个元素,其中第\(i\)个元素有\(n_i\)个,求全排列数。
\(P‘=\frac{(\sum_{i=1}^k n_i)!}{n_i!n_2!...n_k!}\)
即先全排列,然后给每个元素编号。
有\(k\)个元素,每个元素可选无穷多个,一共选\(k\)个,求方案数。
\(C‘=C_{k-n+1}^{n-1}=C_{k-n+1}^k\)
假如第\(i\)个元素选\(x_i\)个,那么原问题变为\(x_1+x_2+...+x_n=k\)。
令\(y_i=x_i+1\),那么\(y_1+y_2+y_3+...+y_n=k+n\)
此时\(y>0\),即每个元素都要选。所以等于在\(k+n\)个元素(\(k+n-1\)个空位)间放\(n-1\)个隔板。
前几个数:\(1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 1767263190\)
好像我只会用它打表找规律
公式:
\(C‘[n]=\frac{C_{2n}^n}{n+1}\)
\(C‘[n]=\sum_{i=1}^{n-1} C‘^iC‘^{n-i}\)
应用:
n层的阶梯切割为n个矩形的切法数。
求解\(\sum_{i+1}^n\lfloor\frac{n}{i}\rfloor\)
据观察,\(\lfloor\frac{n}{i}\rfloor\)的取值只有\(\sqrt{n}\)个。
定理:若有一个值\(i\),那么数论分块中其同值上界为\(ceil=\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\)。
即在\([i,ceil]\)这一段区间内,\(\lfloor\frac{n}{i}\rfloor\)的取值是一样的,于是可计算整块贡献。
int l = 1 , r , ans = 0;
while(l<=n){
r = n/(n/l);
ans += (r-l+1)*(n/i);
l = r + 1;
}
标签:欧拉定理 i+1 note ceil 排列 AC 矩阵乘法 lin 约数
原文地址:https://www.cnblogs.com/yanshannan/p/8806665.html