快速计算C(n,r)
在网上见的,引用出处为:http://blog.csdn.net/alexingcool/article/details/7997599
可以在logn内计算出,但是容易溢出。
[cpp] view plain copy
01.#include <iostream>
02.#include <iterator>
03.#include <algorithm>
04.
05.using namespace std;
06.
07.#define MAXSIZE 100
08.unsigned long answer[MAXSIZE];
09.
10.unsigned long long int power(unsigned long base, unsigned long exp)
11.{
12. unsigned long long int result = 1;
13. while (exp)
14. {
15. if (exp & 0x01)
16. result *= base;
17. base *= base;
18. exp >>= 1;
19. }
20.
21. return result;
22.}
23.
24.void cnr(unsigned long n, unsigned long *answer)
25.{
26. unsigned long long int x = (1 << n) + 1;
27. unsigned long long int mask = (1 << n) - 1;
28. unsigned long long int result;
29.
30. result = power(x, n);
31. for (unsigned long i = 0; i <= n; i++, result >>= n)
32. {
33. cout << result << endl;
34. answer[i] = result & mask;
35. cout << "answer[" << i << "] = " << answer[i] << endl;
36. }
37.}
38.
39.void main()
40.{
41. int number = 4;
42. cnr(number, answer);
43. copy(answer, answer + number, ostream_iterator<int>(cout, " "));
44.}
当然,可以用动归,慢点,n2:
利用公式C(n,r)=C(n-1,r-1)+C(n-1,r)来化简求解:
01.#include <iostream>
02.
03.using namespace std;
04.
05.#define MAXSIZE 100
06.
07.unsigned long cnr(int n, int r)
08.{
09. unsigned long c[MAXSIZE];
10. int i, j;
11. for (i = 0; i <= r; i++)
12. c[i] = 1;
13. for (i = 1; i <= n - r; i++)
14. for (j = 1; j <= r; j++)
15. c[j] += c[j - 1];
16. return c[r];
17.}
18.
19.void main()
20.{
21. int result = cnr(10, 2);
22. cout << "result = " << result << endl;
23.}
还可以用质因数分解,不易溢出。
快速计算C(n,r)的更多相关文章
- 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)
[背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...
- Sql优化(二) 快速计算Distinct Count
原创文章,始发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com 个人博客上本文链接http://www.jasongj.com/2015/03/15/count_di ...
- Paths on a Grid POJ - 1942 组合数学 (组合数的快速计算)
题意:格路问题 没什么难度 难点在于如何快速计算相对较大的组合数 思路:运用手写计算组合数的方式进行计算 如c(8,3) 如果手算就是 8*7*6/(3*2*1)这样可以很快得解出 计算代码为: ...
- [Swift通天遁地]五、高级扩展-(14)扩展String快速计算字符串中的各种数学表达式
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Excel怎样根据出生日期,快速计算出其年龄呢?
问题:怎样根据出生日期,快速计算出其年龄呢? 方法:DATEDIF函数 Step1:在编辑栏中输入公式:=DATEDIF(E2,TODAY(),”Y”),按回车键. Step2:用鼠标向下拖拽复制公式 ...
- 不安装任何软件或脚本使用powershell快速计算文件的MD5/SHA1/SHA256等校验值
有的时候在检查升级过程中需要对xml文件进行签名,而xml文件中一般都需要包含安装包的SHA256值,这里分享一个使用PowerShell快速计算SHA256等其他值的方法. 一.在需要计算文件SHA ...
- 如何使用 numpy 和 pytorch 快速计算 IOU
前言 在目标检测中用交并比(Interection-over-unio,简称 IOU)来衡量两个边界框之间的重叠程度,下面就使用 numpy 和 pytorch 两种框架的矢量计算方式来快速计算各种情 ...
- 皮尔逊相似度计算的例子(R语言)
编译最近的协同过滤算法皮尔逊相似度计算.下顺便研究R简单使用的语言.概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 由于这里每一个数都是等概率的.所以就当做是数 ...
- 数据可视化之PowerQuery篇(二)这个方法帮你快速计算列
https://zhuanlan.zhihu.com/p/81846862 PowerQuery中,对两列或者多列的计算一般通过添加自定义列来实现,以下表为例, 如果需要1月和2月数据的合计,可以添加 ...
随机推荐
- linux下eclipse
最近想学习C++,所以就重新安装了linux系统,虽然这两者没有什么联系,但是我还是比较喜欢linux系统,所以在linux下安装了Eclipse,想起了当初学习Red Hat 9.0时的痛苦场景,哎 ...
- Linux 路由 策略路由
Linux 路由 策略路由 目录 Linux 路由 策略路由 一.路由表 编辑路由表配置文件:/etc/iproute2/rt_tables添加删除修改路由表 二.IP策略 查看IP策略 添加IP策略 ...
- 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库
引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...
- mysql plugin
mysql plugin 概要 mysql可以通过启动参数,系统命令mysql_install,mysql命令install plugin来加载指定的插件 mysql的存储引擎被设计成插件式,可以根据 ...
- 2020安徽程序设计省赛 G序列游戏
2020安徽程序设计省赛 G序列游戏 有一个序列w,初始为空.再给出一个长度为m 单调递增的序列a.你需要对序列w 作如下n 次操作: (1)操作0,在序列尾部添加数字0. (2)操作1,在序列尾部添 ...
- jQuery中toggle与slideToggle以及fadeToggle的显示、隐藏方法的比较
1.区别 ①动画效果的比较: toggle:直接显示.隐藏,如果有[时间参数]且[匹配的元素有宽度属性],则动态效果为左上角-右下角拉卷效果,透明度0-1之间的变化:若有时间参数但是[匹配的元素没有宽 ...
- linux mysql source 导入大文件报错解决办法
找到mysql的配置文件目录 my.cnf interactive_timeout = 120wait_timeout = 120max_allowed_packet = 500M 在导入过程中可能会 ...
- 使用uiautomatorviewer报错Error obtaining UI hierarchy
现象:使用uiautomatorviewer报错Error obtaining UI hierarchy 解决方法:经验证关闭appium,再重新获取,就不会报错 (python运行了app代 ...
- (二)数据源处理5-excel数据转换实战(上)
把excel_oper02.py 里面实现的:通过字典的方式获取所有excel数据.放进utils: ️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️ utils: def get_al ...
- /etc/hosts文件
这个文件告诉主机哪些域名对应哪些ip,哪些主机名对应哪些ip. 一般也三个域 网络ip地址 主机名或域名 主机名别名 两部分的时候 主机ip地址和主机名