排列组合
Posted ezsyshx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排列组合相关的知识,希望对你有一定的参考价值。
排列:有序且不重复:(P_n^m=A_n^m=frac{n!}{(n-m)!})
组合:无序且不重复:(C_n^m=frac{n!}{(n-m)!m!})
推广:二项式定理
[(x+y)^n=C_n^0x^ny^0+C_n^1x^{n-1}y^1+?+C_n^{n-1}x^1y^{n-1}+C_n^nx^0y^n=sum_{k=0}^nC_n^kx^{n-k}y^k=sum_{k=0}^nC_n^kx^ky^{n-k}]
其中二次项系数符合杨辉三角
求(sum_{k=0}^{n}C_n^{k}) ((k) 为偶数):
分析:在二项式定理中,取(x=1,y=1)和(x=1,y=-1)
则:
[(1+1)^n=C_n^01^n1^0+C_n^11^{n-1}1^1+?+C_n^{n-1}1^11^{n-1}+C_n^n1^01^n=sum_{i=0}^{n}C_n^i=2^n]
[(1-1)^n=C_n^0-C_n^1+?+(-1)^nC_n^n=sum_{i=0}^{n}(-1)^iC_n^i]
两式相加,得(sum_{k=0}^{n}C_n^{k}=2^{n-1})
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
long long ans();
int main()
{
int t; scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d",&n);
printf("%lld
",ans());
}
return 0;
}
long long ans()
{
int sum=0;
for(int i=2;i<=n;i++)
while(n%i==0)
{
n/=i; sum++;
}
if(sum) return sum;
else return 1;
}
以上是关于排列组合的主要内容,如果未能解决你的问题,请参考以下文章