求C(n,k)的因子个数

C(n,k) = (n*(n-1)*...*(n-k+1))/(1*2*...*k) = p1^k1 * p2^k2 * ... * pt^kt

这里只要计算出分子中素数因子个数减去分母中的个数

然后每一种因子都有 (cnt+1)种取的可能,乘一下就出来了

但是不能逐个因子分解,试了两次都错了,后来初始的时候,先将这432个数提前预处理分解好保存到vector中

然后用的时候直接提取就行

不然会因为数据量太大超时的

 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <cmath>
 #include <ctime>
 #include <cstdlib>
 #include <vector>

 using namespace std;
 #define ll long long
 #define N 500
 #define pii pair<int,int>
 ] , prime[N+] , tot;
 ];
 vector<pii> v[N];

 void init()
 {
     check[] = true;
      ; i<=N ; i++)
     {
         if(!check[i]) prime[tot++] = i;
         for(int j=i+i ; j<=N ; j+=i) check[j]=true;
     }
 }

 void fenjie(int x)
 {
     int tmp = x;
      ; i<tot ; i++){
         if(prime[i]>x) break;
         ;
         ){
             x/=prime[i];
             cnt++;
         }
         if(cnt) v[tmp].push_back(make_pair(prime[i] , cnt));
     }
     ) v[tmp].push_back(make_pair(x , ));
 }

 void solve(int n , int k)
 {
     memset(cnt ,  , ));
      , up=n , dn= ; i<=k ; i++ , up-- , dn++){
         int l1 = v[up].size() , l2 = v[dn].size();
          ; i<l1 ; i++) cnt[v[up][i].first] += v[up][i].second;
          ; i<l2 ; i++) cnt[v[dn][i].first] -= v[dn][i].second;
     }
     ll ret = ;
      ; i<tot ; i++){
         if(prime[i]>n) break;
         ret *= (cnt[prime[i]]+);
     }
     printf("%I64d\n" , ret);
 }

 int main() {
    // freopen("a.in" , "r" , stdin);
    // freopen("out.txt" , "w" , stdout);
     init();
      ; i<= ; i++) {v[i].clear();fenjie(i);}
     int n , k;
     while(~scanf("%d%d" , &n , &k)){
         solve(n , k);
     }
 }

POJ 2992 求组合数的因子个数的更多相关文章

  1. POJ 2992 Divisors (求因子个数)

    题意:给n和k,求组合C(n,k)的因子个数. 这道题,若一开始先预处理出C[i][j]的大小,再按普通方法枚举2~sqrt(C[i][j])来求解对应的因子个数,会TLE.所以得用别的方法. 在说方 ...

  2. N!分解质因子p的个数_快速求组合数C(n,m)

    int f(int n,int p) { ) ; return f(n/p,p) + n/p; } https://www.xuebuyuan.com/2867209.html 求组合数C(n,m)( ...

  3. poj 2992

    http://poj.org/problem?id=2992 大意:求(n,k)的因子个数 解题思路:(n,k) = n!/(k!(n-k)!)  任意一个数都可以用其质因子来表示  eg: 26 = ...

  4. A - Divisors POJ - 2992 (组合数C的因子数)数学—大数

    题意:就是求组合数C的因子的个数! 先说一下自己THL的算法,先把组合数求出来,然后将这个大数分解,得到各个素数的个数,再利用公式!用最快的大数分解算法 分析一下时间复杂度!   n1/4但是分析一下 ...

  5. POJ 3978 Primes(求范围素数个数)

    POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内 ...

  6. 求组合数 C++程序

    一 递归求组合数 设函数为void    comb(int m,int k)为找出从自然数1.2.... .m中任取k个数的所有组合. 分析:当组合的第一个数字选定时,其后的数字是从余下的m-1个数中 ...

  7. LightOj1028 - Trailing Zeroes (I)---求因子个数

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1028 题意:给你一个数 n (1<=n<=10^12), 然后我们可以把它 ...

  8. Divisors_组合数因子个数

    Description Your task in this problem is to determine the number of divisors of Cnk. Just for fun -- ...

  9. lucas求组合数C(n,k)%p

    Saving Beans http://acm.hdu.edu.cn/showproblem.php?pid=3037 #include<cstdio> typedef __int64 L ...

随机推荐

  1. OSError: libcudart.so.7.5: cannot open shared object file: No such file or directory

    在ubuntu14.04-64-bit,安装完cuda ,cudnn.opencv后, 配置完MXNet,运行demo 时出现错误,库路径环境变量问题,解决方法: sudo ldconfig /usr ...

  2. OpenCv遍历图像小结

    参考:http://www.cnblogs.com/ronny/p/opencv_road_2.html http://blog.csdn.net/xiaowei_cqu/article/detail ...

  3. c#什么时候使用virtual什么时候使用abstract

    一.C#中virtual与abstract的区别(引用"姓吕名布字子乔"的文章) C#的virtual & abstract经常让人混淆,这两个限定词都是为了让子类进行重新 ...

  4. 标准MDL方法修改Page、NonPage内存的属性

    typedef struct _REPROTECT_CONTEXT { PMDL   Mdl; PUCHAR LockedVa; } REPROTECT_CONTEXT, * PREPROTECT_C ...

  5. 数组API

    1.数组的创建 var arrayObj = new Array();//创建一个默认数组,长度是0 var arrayObj = new Array(size);//创建一个size长度的数组,注意 ...

  6. SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

    到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProj ...

  7. yii无限极分类

    /** * 获取菜单Tree * * @return multitype: */ public function getMenuAllList() { $resArr = $this->getT ...

  8. [转载] ubuntu Authentication failure

    ubuntu的root用户默认是禁止的,需要手动打开才行.事实上ubuntu下的所有操作都用不到root用户,由于sudo的合理使用,避免了root用户下误操作而产生的毁灭性问题.root账号启用方法 ...

  9. 重新开始学习javase_多态(动态绑定、推迟绑定或者运行期绑定)

    一,谈向上转换,或者上溯造型 什么是向上转换(上溯造型),一句话就是父类的引用指向子类的对象.或者把子类的对象当作父类来用 为什么要进行向上转换?我们先看一个例子吧! @Test public voi ...

  10. HTML学习 框架

    iframe 在原来的页面嵌入其他页面 <iframe src="其他页面地址" width="宽" height="高" frame ...