题意:

求 组合数c(n,k)的因子数量

由算术基本定理很容易求得,不过第一次却T了,加了好多预处理,o1查询,才过

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define I64d lld
int prime[];
int isnotprime[];
int fac[][];
int nfac[][];
long long ans[][];
int np;
void setprime()
{
np=;
for(int i=;i<=;i++)
{
if(!isnotprime[i])
{
prime[np++]=i;
}
for(int j=;j<np&&i*prime[j]<=;j++)
{
isnotprime[i*prime[j]]=;
if(i%prime[j]==)
break;
}
}
return;
}
void setfac()
{
memset(fac,,sizeof(fac));
for(int i=;i<=;i++)
{
int p=i;
for(int j=;j<np;j++)
{
while(p%prime[j]==)
{
fac[i][j]++;
p/=prime[j];
}
}
}
return;
}
void setans()
{
memset(nfac,,sizeof(nfac));
for(int i=;i<=;i++)
{
for(int j=;j<np;j++)
nfac[i][j]=nfac[i-][j]+fac[i][j];
}
for(int n=;n<=;n++)
{
for(int k=;*k<=n;k++)
{
long long res=;
for(int i=;i<np;i++)
{
res*=nfac[n][i]-nfac[k][i]-nfac[n-k][i]+;
}
ans[n][k]=ans[n][n-k]=res;
}
}
return;
}
int main()
{
setprime();
setfac();
setans();
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
printf("%I64d\n",ans[n][k]);
}
return ;
}

poj:2992 因子数量的更多相关文章

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

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

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

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

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

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

  4. poj 2992

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

  5. POJ 2992 Divisors

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

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

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

  7. 将一个整数数组先按照因子数量排序,再按照数字大小排序,输出第k个数

    同小米OJ比赛题:现在有 n 个数,需要用因子个数的多少进行排序,因子个数多的排在后面,因子个数少的排在前面,如果因子个数相同那么就比较这个数的大小,数大的放在后面,数小的放在前面.现在让你说出排序之 ...

  8. 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 ...

  9. poj 3735 大数量反复操作问题(矩阵高速幂)

    题意:一个一维数组,3种操作: a:  第i个数+1,b: 第i个数=0 ,c::交换某俩处的数.  由三种基本操作构成一组序列,反复该序列m次(m<10^9),问结果 属于一种综合操作反复型: ...

随机推荐

  1. 如何右键新建HTML

    直接转载的,原文作者写的很详细:http://blog.csdn.net/ruanjiayou/article/details/51284864 14年在qq日志里写过 2014-10-25  htt ...

  2. css的存在形式以及优先级

    css的存在形式以及优先级 css不仅仅可以在每个head标签中定义,而且也可以写在一个文件中,每个页面即可进行引用,这样可以做到重复利用. css文件的写法如下: common.css .c1{ h ...

  3. 使用awrextr.sql导出awr原始数据

    1.AWR原始数据与AWR报告的差别 AWR原始数据: 是oracle数据库mmon进程定期将统计量从内存转储至磁盘,并以结构化的形式存入若干张表组成自己主动工作负荷存储仓库(AutomaticWor ...

  4. Nested Class Templates

      Templates can be defined within classes or class templates, in which case they are referred to as ...

  5. Linux设备文件自动生成

    第一种是使用mknod手工创建:# mknod <devfilename> <devtype> <major> <minor> 第二种是自动创建设备节点 ...

  6. Linux中/etc/passwd文件与/etc/shadow文件解析.

    此文章转载自"慧可",用来学习. 1. /etc/passwd文件 1.1 /etc/passwd文件内容格式 用户名: 密码 : uid  : gid :用户描述:主目录:登陆s ...

  7. DC综合流程

    Design Compiler and the Design Flow 步骤 将HDL描述的设计输入到Design Compiler中 Design Compiler使用technology libr ...

  8. System.Net网络编程--AuthenticationManager和IAuthenticationModule

    AuthenticationManager——管理客户端身份验证过程中调用的身份验证模块. public class Demo1 { private static string username, p ...

  9. (转)JQuery处理json与ajax返回JSON实例

    son数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法. 一.JSON的一些基础知识. JSON中对象通过 ...

  10. 3.Android Studio系列教程3——快捷键

    原文链接:http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/   一.更新Android Studio 项目根目录的 ...