【POJ2992】Divisors
【题目概括】
计算\(C_n^k\)的因子个数。
【思路要点】
- 首先考虑将组合数展开,展开后就是\(\frac {n!}{k!\times (n-k)!}\)。
- 这样就是计算出这些质因子的个数,然后将插值相乘就是答案了。
- 但是数据较大,所以我们考虑一开始先将所有答案预处理来。
- 如果是暴力求解,那么就会超时。
- 我们考虑用归纳法来计算,如果计算出\(C_{n}^{k}\),那么如何计算出\(C_n^{k+1}\)。
- 那么将式子展开,就相差了\(k+1\)和\(n-k+1\),就\(O(n)\)计算一次。
- 时间复杂度 \(\mathcal O(n^3)\)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 505;
int x, y, primeCnt;
bool ntPrime[N];
ll tot[N];
int prime[N];
ll ans[N][N];
void getPrime(int lim) {
for (int i = 2; i <= lim; i++) {
if (!ntPrime[i])
prime[++primeCnt] = i;
for (int j = 1; j <= primeCnt && i * prime[j] <= lim; j++) {
ntPrime[i * prime[j]] = 1;
if (i % prime[j])
break;
}
}
}
void divide(int x, int tp) {
for (int i = 1, cnt; i <= primeCnt; i++) {
if (x % prime[i] == 0) {
cnt = 0;
while (x % prime[i] == 0) {
x /= prime[i];
cnt++;
}
tot[i] += tp * cnt;
}
}
}
ll solve(int x, int y) {
for (int i = x; i >= (x - y + 1); i--)
divide(i, 1);
for (int i = 1; i <= y; i++)
divide(i, -1);
ll ans = 1;
for (int i = 1; i <= primeCnt; i++)
ans *= tot[i] + 1;
return ans;
}
void init() {
for (int i = 0; i <= 432; i++)
for (int j = 0; j <= 432; j++)
ans[i][j] = 1ll;
for (int i = 1; i <= 432; i++) {
memset(tot, 0, sizeof tot);
ans[i][1] = solve(i, 1);
for (int j = 2; j <= (i >> 1); j++) {
divide(j, -1);
divide(i - j + 1, 1);
for (int k = 1; k <= primeCnt; k++)
ans[i][j] *= tot[k] + 1;
}
}
}
int main() {
getPrime(450);
init();
while (scanf("%d %d", &x, &y) != EOF) {
y = min(y, x - y);
printf("%lld\n", ans[x][y]);
}
return 0;
}
【POJ2992】Divisors的更多相关文章
- 【BZOJ】【4146】 【AMPPZ2014】Divisors
暴力 由于值的范围很小($ \leq 2*10^6$),所以用一个cnt数组统计每个值有多少个数,然后从小到大,统计每个数的倍数即可. 根据调和数?的神奇性质= =这样是$O(nlogn)$的…… / ...
- 【BZOJ4146】[AMPPZ2014]Divisors
[BZOJ4146][AMPPZ2014]Divisors Description 给定一个序列a[1],a[2],...,a[n].求满足i!=j且a[i]|a[j]的二元组(i,j)的个数. In ...
- Sigma Function (LightOJ - 1336)【简单数论】【算术基本定理】【思维】
Sigma Function (LightOJ - 1336)[简单数论][算术基本定理][思维] 标签: 入门讲座题解 数论 题目描述 Sigma function is an interestin ...
- 【LeetCode】数学(共106题)
[2]Add Two Numbers (2018年12月23日,review) 链表的高精度加法. 题解:链表专题:https://www.cnblogs.com/zhangwanying/p/979 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
随机推荐
- 导入已有项目到svn
版本管理一直是程序员使用频率比较高的一个工具软件.不管你是自己使用还是使用别人提供的svn服务,svn的使用技巧都一个必须掌握的技术.为止小编专门制作了关于svn使用技巧的系列文章.今天我们先来介绍一 ...
- 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法
按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...
- 最常见的Python异常报错Error
内置异常 官网链接:https://docs.python.org/zh-cn/3/library/exceptions.html 在 Python 中,所有异常必须为一个派生自 BaseExcept ...
- 反复横跳的瞄准线!从向量计算说起!基于射线检测的实现!Cocos Creator!
最近有小伙伴问我瞄准线遇到各种形状该怎么处理?如何实现反复横跳的瞄准线?最近刚好在<Cocos Creator游戏开发实战>中看到物理系统有一个射线检测,于是,基于这个射线检测,写了一个反 ...
- spring boot-5.配置文件注入
配置文件注入这一部分内容主要有以下几点内容: 1.全局配置文件值注入 2.自定义配置文件值注入 3.自定义的Spring 配置文件生效 (1)首先介绍全局配置文件的值注入,全局配置文件值注入有两种方式 ...
- ps -ef 和ps -aux的区别
在 linux 显示进程的命令是ps ,常用的是 ps -ef,今天看到了还有一个ps -aux,查询了资料,这里总结一下 那么ps -ef 和ps -aux 有什么区别呢? 其实区别不是很大,这就要 ...
- Longest Subsequence CodeForces - 632D (lcm)
大意: 给定序列$a$, 求选出最长的一个子序列, 使得lcm不超过m. 刚开始想复杂了, 想着枚举gcd然后背包, 这样复杂度就是$O(\sum\limits_{i=1}^m \frac{m\sig ...
- Openresrt最佳案例
第1篇:Nginx介绍 Nginx是一个高性能的Web 服务器,同时是一个高效的反向代理服务器,它还是一个IMAP/POP3/SMTP 代理服务器. 由于Nginx采用的是事件驱动的架构,能够处理并发 ...
- jQuery改变元素class属性
//去掉class属性 $(this).parent('li').removeClass("prev_selected"); //去掉同兄弟的class属性. $(this).pa ...
- php前端做过滤校验
http://www./test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E 以上的 URL 中,将被解析为如下代码并执行: < ...