题意:就是求组合数C的因子的个数!

先说一下自己THL的算法,先把组合数求出来,然后将这个大数分解,得到各个素数的个数,再利用公式!用最快的大数分解算法

分析一下时间复杂度!   n1/4但是分析一下,对于一个1018的大数而言,求一个还可以,但是数据组多了之后肯定会超时!

然后,看了博客!

知识点1,

  m根据素数的唯一分解。那么m的因子的个数也就是各个素数因子的指数加一再相乘!

  表达式: ans=(k1+1)*(k2+1)...*(kv+1)

  解析:其实,就是一个母函数,每一项选择这个素数的几次指数(要把0这种特殊情况考虑进去!所以要加1)________实在不懂请自觉类比二项式(a+b)k是不是每次选a或者选b。

知识点2,

这样就求出来了,各个素数所对应的素数的次数!

然后,把这三个数,素数唯一分解了,是不是一定是相同的素数(因为整除),则是指数相减!

ac代码

#include<cstdio>
#include<cstring>
#define ll long long
#define N 440
int prime[N];
bool vis[N];
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, , sizeof(num));
solve(n, );
solve(m, -);
solve(n - m, -);
ll ans = ;
for (int i = ; i < Fcnt; ++i)
{
ans *= (num[i] + );
}
printf("%lld\n", ans);
}
}

A - Divisors POJ - 2992 (组合数C的因子数)数学—大数的更多相关文章

  1. Day7 - G - Divisors POJ - 2992

    Your task in this problem is to determine the number of divisors of Cnk. Just for fun -- or do you n ...

  2. poj 2992 Divisors (素数打表+阶乘因子求解)

    Divisors Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9617   Accepted: 2821 Descript ...

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

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

  4. POJ 2992 Divisors

    每个数都可以分解成素数的乘积: 写成指数形式:n=p1^e1*p2^e2*...*pn^en:(p都是素数) 那么n的因数的数量m=(e1+1)*(e2+1)*...*(en+1): 所以用筛选法筛出 ...

  5. poj 2992 Divisors 整数分解

    设m=C(n,k)=n!/((n-k)!*k!) 问题:求m的因数的个数 将m分解质因数得到 p1有a1个 p2有a2个 .... 因为每一个质因数能够取0~ai个(所有取0就是1,所有取ai就是m) ...

  6. poj 2992

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

  7. poj 3252 组合数

        主要考察组合数知识,初始化的时候参考公式 首先先推个公式,就是长度为len的Round Numbers的个数.      长度为len,第一位肯定是1了.      那么后面剩下 len-1位 ...

  8. poj Code(组合数)

    Code Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9918   Accepted: 4749 Description ...

  9. POJ 2992 求组合数的因子个数

    求C(n,k)的因子个数 C(n,k) = (n*(n-1)*...*(n-k+1))/(1*2*...*k) = p1^k1 * p2^k2 * ... * pt^kt 这里只要计算出分子中素数因子 ...

随机推荐

  1. C#基础知识回顾-- 反射(2)

    使用反射调用方法: 一旦知道一个类型所支持的方法,就可以对方法进行调用.调用时,需使用包含在   MethodInfo中的Invoke()方法.调用形式:   object Invoke(object ...

  2. c# 生成验证码图片

    /// <summary> /// 生成验证码图片 /// </summary> /// <returns></returns> public byte ...

  3. c#cookie读取写入操作

    public static void SetCookie(string cname, string value, int effective) { HttpCookie cookie = new Ht ...

  4. WebFrom 【母版页】

    ASP.NET中母版页作用 一是提高代码的复用(把相同的代码抽出来) 二是使整个网站保持一致的风格和样式. 母版页存在就一定要有内容页的存在,否则母版页的存在就没有了意义. .master 一.添加母 ...

  5. EL表达式和JSTL的使用

    一:EL表达式 1.概述:在jsp开发中,为了获取Servlet域对象中存储的数据,经常要写很多java代码,这样的做法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式.它是E ...

  6. Matlab .asv是什么文件

    有时在存放m文件的文件夹中会出现*.asv asv 就是auto save的意思,*.asv文件的内容和相应的*.m文件内容一样,用记事本和matlab都能打开它.它可以作为*.m文件的"备 ...

  7. table垂直居中

    th,td{ text-align:center;/** 设置水平方向居中 */ vertical-align:middle/** 设置垂直方向居中 */ }

  8. js之全选即点击全选标签可选择全部复选框

    目标效果:网页全选功能,即点击全选标签可选择全部复选框 实现代码如下 <!DOCTYPE html> <html lang="en"> <head&g ...

  9. 微信小程序 数组索引 data-“”解释

    按照官方最新文档循环的方式,索引值是以  wx:for-index="index" 方式写的, 以   parseInt(event.currentTarget.dataset.i ...

  10. Redis 入门 安装 命令

    win7 64位安装redis 及Redis Desktop Manager使用 引自:http://blog.csdn.net/joyhen/article/details/47358999 写基于 ...