POJ 2992 求组合数的因子个数
求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>
int cnt[N+] , prime[N+] , tot;
bool check[N+];
vector<pii> v[N]; void init()
{
check[] = true;
for(int i= ; 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;
for(int i= ; i<tot ; i++){
if(prime[i]>x) break;
int cnt = ;
while(x%prime[i]==){
x/=prime[i];
cnt++;
}
if(cnt) v[tmp].push_back(make_pair(prime[i] , cnt));
}
if(x>) v[tmp].push_back(make_pair(x , ));
} void solve(int n , int k)
{
memset(cnt , , sizeof(int)*(n+));
for(int i= , up=n , dn= ; i<=k ; i++ , up-- , dn++){
int l1 = v[up].size() , l2 = v[dn].size();
for(int i= ; i<l1 ; i++) cnt[v[up][i].first] += v[up][i].second;
for(int i= ; i<l2 ; i++) cnt[v[dn][i].first] -= v[dn][i].second;
}
ll ret = ;
for(int i= ; 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();
for(int i= ; i<= ; i++) {v[i].clear();fenjie(i);}
int n , k;
while(~scanf("%d%d" , &n , &k)){
solve(n , k);
}
}
POJ 2992 求组合数的因子个数的更多相关文章
- POJ 2992 Divisors (求因子个数)
题意:给n和k,求组合C(n,k)的因子个数. 这道题,若一开始先预处理出C[i][j]的大小,再按普通方法枚举2~sqrt(C[i][j])来求解对应的因子个数,会TLE.所以得用别的方法. 在说方 ...
- 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)( ...
- poj 2992
http://poj.org/problem?id=2992 大意:求(n,k)的因子个数 解题思路:(n,k) = n!/(k!(n-k)!) 任意一个数都可以用其质因子来表示 eg: 26 = ...
- A - Divisors POJ - 2992 (组合数C的因子数)数学—大数
题意:就是求组合数C的因子的个数! 先说一下自己THL的算法,先把组合数求出来,然后将这个大数分解,得到各个素数的个数,再利用公式!用最快的大数分解算法 分析一下时间复杂度! n1/4但是分析一下 ...
- POJ 3978 Primes(求范围素数个数)
POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内 ...
- 求组合数 C++程序
一 递归求组合数 设函数为void comb(int m,int k)为找出从自然数1.2.... .m中任取k个数的所有组合. 分析:当组合的第一个数字选定时,其后的数字是从余下的m-1个数中 ...
- 计蒜客 18487.Divisions-大数的所有因子个数-Miller_Rabin+Pollard_rho-超快的(大数质因解+因子个数求解公式) (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 F)
这一场两个和大数有关的题目,都用到了米勒拉宾算法,有点东西,备忘一下. 题目传送门 F. Divisions 传送门 这个题是求一个数的所有因子个数,但是数据比较大,1e18,所以是大数的题目,正常的 ...
- 51nod1119(除法取模/费马小定理求组合数)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119 题意:中文题诶- 思路:这题数据比较大直接暴力肯定是不 ...
- [2011山东ACM省赛] Binomial Coeffcients(求组合数)
Binomial Coeffcients nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...
随机推荐
- LCA模板
/*********--LCA模板--***************/ //设置好静态参数并构建好图的邻接表,然后调用lca_setquery()设置查询 //最后调用lca_start(),在lca ...
- Java Performance - 如何调查解决内存问题
JVM 的内存溢出/不足/OutOfMemoryError/垃圾收集恶性循环是需要解决,又是屡见不鲜的问题. 建议阅读官方的 Troubleshooting Guide for Java SE 6 w ...
- 20160808_Shell书
1. http://item.jd.com/11075150.html 2.
- window下安装nodejs
下载nodejs 去https://nodejs.org/en/download/下载nodejs,有.mis(安装版)和.exe(二进制版) .mis(安装版) 一般下载这个就行,简单方便,自带np ...
- wampserver2.5安装 redis缓存,igbinary, phalcon框架
wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...
- 通用 PE 工具箱1.9.6(XP内核)by Uepon(李培聪)
通用 PE 工具箱1.9.6(XP内核)by Uepon(李培聪)官网:http://hi.baidu.com/uepon?page=21.8版论坛帖子:http://bbs.wuyou.net/fo ...
- IIS提示Server Application Unavailable
浏览器访问网站,IIS提示Server Application Unavailable,我的解决方式是进入IIS管理界面,找到对应的站点,之后重启这个站点.
- python 练习 6
#!/usr/bin/python # -*- coding: utf-8 -*- from collections import deque from math import log10 def p ...
- Disable SELinux CentOS 7
Disable SELinux CentOS 7 This blog covers the basic steps to disable SELinux on CentOS 7 first we ne ...
- 张艾迪(创始人):世界级天才女孩Eidyzhang
让整个世界与我们一同解读世界第一天才:Eidyzhang 她改变了整个世界.她的故事也激励了整个世界的不论亚洲.欧洲.非洲.南美州.北美洲.南极洲 天才Eidyzhang的故事激励了整个世界不论黑人. ...