问题 A: 组合数

时间限制: 1 Sec  内存限制: 128 MB
提交: 1975  解决: 150
[提交] [状态] [命题人:jsu_admin]

题目描述

求组合数C(N,M),以及C(N,M)因子个数。

输入

N和M,其中0<=M<=N<=50,以EOF结束。

输出

该组合数结果

样例输入 Copy

3 2
4 2

样例输出 Copy

3 2
6 4
因为求组合数的时候 long long 存不下,所以我们需要分解质因数再求解,它的就是把分子分母约去同时有的素因子以达到中间算阶乘的时候不会爆 long long

计算因子数用到了唯一分解定理
一个数 n 肯定能被分解成 n=p1^r1 * p2^r2 . . .*pn^rn
假设 p1p2,…pn 是它的素因子
假设 r1,r2,…rn 分别是 p1…pn 的幂次数
那么(1+r1)*(1+r2)….*(1+rn)就是他的因子数
 /**
/*两个板子 快速幂+组合数
*/
#include<stdio.h>
#include <iostream>
#include <bits/stdc++.h>
#define maxn 200005
typedef long long ll;
using namespace std;
const ll mod=;
ll fac[maxn],inv[maxn];
ll pow_mod(ll a,ll n)
{
ll ret =;
while(n)
{
if(n&) ret=ret*a%mod;
a=a*a%mod;
n>>=;
}
return ret;
}
void init()
{
fac[]=;
for(int i=;i<maxn;i++)
{
fac[i]=fac[i-]*i%mod;
}
}
ll Cc(ll x, ll y)
{
return fac[x]*pow_mod(fac[y]*fac[x-y]%mod,mod-)%mod;
}
//ll pow(ll x,ll n)
//{
//ll temp(x),res(1);
//while(n)
//{
//if(n&1)
//{
//res *= temp;
//}
//temp *= temp;
//n>>=1;
//}
//return res;
//} long long C[][];
ll D(ll m,ll n)
{
for(int i=;i<;++i)
{
C[i][i]=;
C[i][]=;
}
for(int i=;i<;++i)
{
for(int j=i+;j<;++j)
{
C[j][i]=C[j-][i-]+C[j-][i];
}
}
// int m,n;
// while(cin>>m>>n)///C(m,n)
// {
// cout<<C[m][n]<<endl;
// }
return C[m][n];
}
#define N 440
int prime[N];
bool vis[N];
double fact(int n)//求阶乘
{
int i;
double sum;
sum=;
for(i=;i<=n;i++)
{
sum=sum*i;
}
return sum;
} int Prime()
{
int cnt = ;
for (int i = ; i <= N; ++i)
{
if (!vis[i])
{
prime[cnt++] = i;
}
for (int j = ; j < cnt&&i*prime[j] <= N; ++j)
{
vis[i*prime[j]] = ;
if (i%prime[j] == )break;
}
}
return cnt;
}
int num[];
int Fcnt;
void solve(int n,int y)
{
for (int i = ; i < Fcnt; ++i)
{
int c = , p = prime[i];
while (n / p )
{
c += n / p;
p *= prime[i];
}
num[i] = num[i] + y*c;
}
} //int main()
//{
// Fcnt=Prime();
// int n, m;
// while (scanf("%d%d", &n, &m) != EOF){
// memset(num, 0, sizeof(num));
// solve(n, 1);
// solve(m, -1);
// solve(n - m, -1);
// ll ans = 1;
// for (int i = 0; i < Fcnt; ++i)
// {
// ans *= (num[i] + 1);
// }
// printf("%lld\n", ans);
// }
//}
int main(){
ll p,q,k,a,b;
Fcnt=Prime();
int n,m;
double n1,m1,o1;
double fact(int n);
while(scanf("%lld%lld%lld%lld%lld",&p,&q,&n,&m,&b)!=EOF){
printf("%lld\n",p);
n1=fact(n);
m1=fact(m);
o1=fact(n-m);
int k = ;
memset(num, , sizeof(num));
solve(n, );
solve(m, -);
solve(n - m, -);
ll ans = ;
for(int i = ;i*i<=((int)(n1/(m1*o1)));i++){
if((int)(n1/(m1*o1))%i==)
k++;
}
printf("%.0f ",n1/(m1*o1),k); // ll CC = (long long)D(k,a);
ll aa = (long long)pow(q,m);
ll bb = (long long)pow(p,b);
ll sum = ((long long)(n1/(m1*o1)))*aa*bb;
// printf("%lld\n",CC);
printf("%lld\n",p);
printf("%lld\n",sum);
}
}

问题 A: 组合数的更多相关文章

  1. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  2. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  3. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  4. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  5. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  6. AC日记——组合数问题 落谷 P2822 noip2016day2T1

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  7. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  8. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

  9. UOJ263 【NOIP2016】组合数问题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  10. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

随机推荐

  1. R语言-三种方法绘制单位圆

    与一般开发语言不同,R以数据统计分析和绘图可视化为主要卖点.本文是第一篇博客,解决一个简单的绘图问题,以练手为目的. 以下直接给出三种单位圆的画法: 方法1 f=seq(,*pi,0.001) x=s ...

  2. [每日一讲] Python系列:数字与运算符

    数字(数值)型 Python 数字数据类型用于存储数值.数据类型是不可变(immutable)的,这就意味着如果改变数字数据类型的值,将重新分配内存空间. Python 支持三种不同的数值类型: 整型 ...

  3. eclipse设置maven web项目打包

    如图:eclipse下的maven web项目,打包部署到本地tomcat时,需要关注的2个方面: 1. src/main/webapp目录下的文件,打包到/ 根路径下 2. 添加maven 依赖,打 ...

  4. 面试题常考&必考之--js闭包特性和优缺点 (外加小例子)

    当内部函数被返回到外部并保存时,一定会产生闭包.闭包会产生原来的作用域链,不释放. 闭包,可以理解为,写一个函数,然后产生闭包的这种现象. 概念: 基础: 主要是:add    reduce  被返回 ...

  5. React Native 之react-native-sqlite-storage

    npm 官网指导: https://www.npmjs.com/package/react-native-sqlite-storage 1. 执行: npm install react-native- ...

  6. HOJ 2315 Time(模拟)

    Description Kim是一个掌控时间的大师.不同于一般人,他习惯使用秒来计算时间.如果你问他现在是几点,他会告诉你现在是今天的xxxx秒.Mik想要考考Kim.他想知道从某一天的00:00:0 ...

  7. Anaconda-navigator 打不开的解决方法(亲测有效!)

    本文链接:https://blog.csdn.net/qq_42489092/article/details/92208822method_1:每当你打不开应用时,不妨试一下:用管理员身份运行 请用管 ...

  8. [思路题][LOJ2290][THUWC2017]随机二分图:状压DP+期望DP

    分析 考虑状压DP,令\(f[sta]\)表示已匹配状态是\(sta\)(\(0\)代表已匹配)时完美匹配的期望数量,显然\(f[0]=1\). 一条边出现了不代表它一定在完美匹配内,这也导致很难去直 ...

  9. UE4 Pro Tips(keeps updating)

    Consolidate 功能 :在工程范围内用一种资源替换另外一种或多种资源具体操作:同时在编辑器中选中两个或多个资源,右键>Asset Actions>Replace Reference ...

  10. [CSP-S模拟测试]:礼物(数学)

    题目传送门(内部题80) 输入格式 第一行输入一个正整数$n$. 第二行到第$n+1$行每行两个正整数$a_i$和$b_i$表示第$i$个礼物中包含$a_i$个红宝石和$b_i$个绿宝石. 输出格式 ...