求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中

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

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

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <ctime>
  6. #include <cstdlib>
  7. #include <vector>
  8.  
  9. using namespace std;
  10. #define ll long long
  11. #define N 500
  12. #define pii pair<int,int>
  13. int cnt[N+] , prime[N+] , tot;
  14. bool check[N+];
  15. vector<pii> v[N];
  16.  
  17. void init()
  18. {
  19. check[] = true;
  20. for(int i= ; i<=N ; i++)
  21. {
  22. if(!check[i]) prime[tot++] = i;
  23. for(int j=i+i ; j<=N ; j+=i) check[j]=true;
  24. }
  25. }
  26.  
  27. void fenjie(int x)
  28. {
  29. int tmp = x;
  30. for(int i= ; i<tot ; i++){
  31. if(prime[i]>x) break;
  32. int cnt = ;
  33. while(x%prime[i]==){
  34. x/=prime[i];
  35. cnt++;
  36. }
  37. if(cnt) v[tmp].push_back(make_pair(prime[i] , cnt));
  38. }
  39. if(x>) v[tmp].push_back(make_pair(x , ));
  40. }
  41.  
  42. void solve(int n , int k)
  43. {
  44. memset(cnt , , sizeof(int)*(n+));
  45. for(int i= , up=n , dn= ; i<=k ; i++ , up-- , dn++){
  46. int l1 = v[up].size() , l2 = v[dn].size();
  47. for(int i= ; i<l1 ; i++) cnt[v[up][i].first] += v[up][i].second;
  48. for(int i= ; i<l2 ; i++) cnt[v[dn][i].first] -= v[dn][i].second;
  49. }
  50. ll ret = ;
  51. for(int i= ; i<tot ; i++){
  52. if(prime[i]>n) break;
  53. ret *= (cnt[prime[i]]+);
  54. }
  55. printf("%I64d\n" , ret);
  56. }
  57.  
  58. int main() {
  59. // freopen("a.in" , "r" , stdin);
  60. // freopen("out.txt" , "w" , stdout);
  61. init();
  62. for(int i= ; i<= ; i++) {v[i].clear();fenjie(i);}
  63. int n , k;
  64. while(~scanf("%d%d" , &n , &k)){
  65. solve(n , k);
  66. }
  67. }

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. 计蒜客 18487.Divisions-大数的所有因子个数-Miller_Rabin+Pollard_rho-超快的(大数质因解+因子个数求解公式) (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 F)

    这一场两个和大数有关的题目,都用到了米勒拉宾算法,有点东西,备忘一下. 题目传送门 F. Divisions 传送门 这个题是求一个数的所有因子个数,但是数据比较大,1e18,所以是大数的题目,正常的 ...

  8. 51nod1119(除法取模/费马小定理求组合数)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119 题意:中文题诶- 思路:这题数据比较大直接暴力肯定是不 ...

  9. [2011山东ACM省赛] Binomial Coeffcients(求组合数)

    Binomial Coeffcients nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...

随机推荐

  1. C++——输入、输出和文件

    一.C++输入和输出概述 1.1.流和缓冲区 C++程序把输入和输出看作字节流.输入时,程序从输入流中抽取字节:输出时,程序将字节插入到输出流中.对于面相文本的程序,每个字节代表一个字符,更通俗地说, ...

  2. Linux配置全局环境变量的方法

    总结3种方法: 1.修改/etc/profile    1.1 :首先在此文件中设置环境变量;    1.2:export  设置好的环境变量.  #view /etc/profile export ...

  3. HTML的<body>标签详解与HTML常用的控制标记

    一.<body>标签: 用于标记网页的主体,body 元素包含文档的所有内容(比如文本.超链接.图像.表格和列表等等.) 1.body标签中可用的属性: bgcolor="颜色值 ...

  4. [Selenium] 使用Javascript选中Input框里的内容,然后清空

    当我们需要清空Input框里的内容,直接使用el.clear()方法又行不通时,可以使用Javascript先去选中内容,然后再使用el.clear()方法:

  5. Hbase之取出行数据指定部分+版本控制(类似MySQL的Limit)

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScanner; import org. ...

  6. commonJS — 事件处理(for Event)

    for Event github: https://github.com/laixiangran/commonJS/blob/master/src/forEvent.js 代码 (function(w ...

  7. 教你开启红米的USB大容量存储选项,全网首发哦

    教你开启红米的USB大容量存储选项,全网首发哦 http://bbs.7to.cn/thread-10732-1-1.html 发表于 2014-4-29 110643 红米note入手也有两天了.各 ...

  8. [maven] settings 文件节点配置详解

    基本结构 <settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...

  9. [redis] Jedis 与 ShardedJedis 设计

    Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...

  10. vs2010 ctrl+F5闪退解决方法

    设置项目的属性页中的“配置属性”->“链接器”->“系统”->“子系统”->“控制台”(即增加“/SUBSYSTEM:CONSOLE”链接选项)