博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2992 Divisors ★ (n!分解素因子)
阅读量:5048 次
发布时间:2019-06-12

本文共 1731 字,大约阅读时间需要 5 分钟。

题目大意:求C(n, k)的约数个数
预备知识
n!分解素因子
    C(n, k) = n!/(k! * (n-k)!) 显然我们只要求出C(n,k)的素因子及其个数就可以了. 首先我们是可以知道n!的素因子的:1~n的素数,又因为C(n, k)是整数,显然k!和(n-k)!的素因子n!都有. 那么我们枚举n!的素因子,
C(n,k)的素因子p的个数 = f(n, p) - f(k, p) - f(n-k, p).     (f(n ,p)表示n!中素因子p的个数) 然后+1乘起来即可.   PS:这题POJ的数据逆天啊……N多组数据……必须先把所有函数都预处理用数组记录下来,不然会TLE……  
#include #include #include using namespace std;int ff[450][450];   //预处理f(n, p)int f(int n, int p){    long long res = 0;    while(n){        res += n/p;        n /= p;    }    return res;}vector  > prime;     //n!的素因子就是1~n中的素数,第一个记录素因子,第二个记录个数bool noprime[440];void Prime(){    prime.clear();    for (int i = 2; i <= 431; i ++){        if (!noprime[i]){            prime.push_back(make_pair(i, 0));            for (int j = i; j <=431; j ++)                ff[j][i] = f(j, i);        }        for (int j = 0; j < prime.size() && prime[j].first*i <= 431; j ++){            noprime[prime[j].first*i] = 1;            if (i % prime[j].first == 0)                break;        }    }}long long ans[450][450];    //预处理factor(n,k)long long factor(int n, int k){    long long res = 1;    for (int i = 0; i < prime.size(); i ++){        if (prime[i].first > n)            break;        int p = prime[i].first;        prime[i].second = ff[n][p];        if (p <= k)            prime[i].second -= ff[k][p];        if (p <= (n - k))            prime[i].second -= ff[n-k][p];        res *= (prime[i].second + 1);    }    return res;}int main(){    Prime();    int n, k;    for (int i = 0; i <= 431; i ++){        for (int j = 0; j <= i; j ++)            ans[i][j] = factor(i, j);    }    while(scanf("%d%d", &n, &k) == 2){        printf("%I64d\n", ans[n][k]);    }    return 0;}
 

转载于:https://www.cnblogs.com/AbandonZHANG/archive/2013/01/23/4113987.html

你可能感兴趣的文章
爬虫综合大作业
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>
UI_搭建MVC
查看>>
一个样例看清楚JQuery子元素选择器children()和find()的差别
查看>>
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>