排列组合

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;
}










以上是关于排列组合的主要内容,如果未能解决你的问题,请参考以下文章

离散:常用排列组合模型归纳,DFS代码实现

关于各种排列组合java算法实现方法

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

Java 全排列与组合

c# 排列组合代码类

代码题(19)— 组合与排列