java 二项式系数_Binomial Coefficient(二项式系数)

news/2024/7/5 18:21:23

In mathematics, any of the positive integers that occurs as a coefficient in the binomial theorem is a binomial coefficient. Commonly, a binomial coefficient is indexed by a pair of integers n ≥ k ≥ 0 and is written {\displaystyle {\tbinom {n}{k}}.} {\displaystyle {\tbinom {n}{k}}.} It is the coefficient of the xk term in the polynomial expansion of the binomial power (1 + x)n, and it is given by the formula.

英文描述

英文描述请参考下面的图。

45f5e98969a3f9049caea6a67d860bc1.png

中文描述

根据给定的公式计算二项式的值。

在这里有一个说明需要注意的是,如果结果超过 1,000,000,000 你的程序应该返回 -1。

如果结果没有定义的话,那么你的程序应该也要返回 -1。

思路和点评

在这里的计算,公式比较简单,就是计算 N,K N-K 的阶乘,在阶乘中,你可以使用递归进行计算。

但是需要注意的是对这个数字的阶乘计算量,程序是很容易溢出的,如果从出题者的意图来看就是要考察大数值的计算和计算中的溢出。

如果你使用的是 Java 的话,你应该使用类 BigDecimal,进行计算。如果你可以使用 Apache Common Math 的话,你就直接使用 CombinatoricsUtils.factorialDouble 进行计算。在计算中允许的最大参数值为 170,超过这个值以后就超过程序能够计算的最大值了。

如果你希望直接计算二项式系数的话,你可以使用 CombinatoricsUtils.binomialCoefficientDouble(40, 20) 直接进行计算。

源代码

源代码和有关代码的更新请访问 GitHub:

测试类请参考:

代码思路请参考:

/**

* https://www.cwiki.us/display/ITCLASSIFICATION/Binomial+Coefficient

*

* Binomial Coefficient

*/

@Test

public void testBinomialCoefficient() {

int n = 40;

int k = 20;

BigDecimal bc = factorial(n).divide(factorial(k).multiply(factorial(n - k)));

// a.compareTo(new BigDecimal(1000000000))

logger.debug("{}", bc);

logger.debug("Check for Compare To - [{}]", bc.compareTo(new BigDecimal(1000000000)));

logger.debug("Value - [{}]", bc);

logger.debug("Apache CombinatoricsUtils Factorial - [{}]", CombinatoricsUtils.factorialDouble(20));

logger.debug("Apache CombinatoricsUtils Binomial Coefficient - [{}]", CombinatoricsUtils.binomialCoefficientDouble(40, 20));

}

/**

* for factorial

*

* @param x

* @return

*/

private static BigDecimal factorial(int x) {

if (x == 1 || x == 0) {

return BigDecimal.valueOf(1);

} else {

return BigDecimal.valueOf(x).multiply(factorial(x - 1));

}

}

测试结果

上面程序的测试结果如下:

2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - 137846528820

2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Check for Compare To - [1]

2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Value - [137846528820]

2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Apache CombinatoricsUtils Factorial - [2.43290200817664E18]

2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Apache CombinatoricsUtils Binomial Coefficient - [1.3784652882E11]


http://www.niftyadmin.cn/n/4079373.html

相关文章

Centos7下安装Tomcat7

在这里我们采用下载tar.gz包来进行安装。 首先先到Apache Tomcat官网上下载Tomcat,这里我们使用Tomcat 7。 下载地址为: http://tomcat.apache.org/download-70.cgi 下载完成之后进行解压 # tar –zxvf apache-tomcat-7.0.78.tar.gz 然后,选择…

好人不长命 祸害遗千年

活到今天的人各种各样都有,也没有哪种人完全绝种了,世界之大,无奇不有,如果你有机会多见到一些人,就会发现大圣大贤和大奸大恶现在都还存在着生存的罪恶么,要看你怎么生存,也要看你怎么定义罪恶…

java接口向接口传递图片_通过java调用Http接口上传图片到服务器

/*** 测试上传png图片**/public static voidtestUploadImage(){String url "http://localhost:8080/app/remindDetails/doRepair.xhtml";String fileName "E:\\工作\\项目\\奇瑞只能制造信息化系统\\工作安排\\接口设计(20171113-)\\1.5.png";Map textMap …

php如何安装补丁,php补丁如何安装-PHP问题

安装php补丁的方法&#xff1a;首先转到php5.4源代码的根目录&#xff1b;然后运行“patch -p0 < /path/to/patch.patch”&#xff1b;最后编译这个补丁版本的php即可。推荐&#xff1a;《PHP视频教程》具体问题&#xff1a;我需要在php代码中安装此修补程序&#xff1a;htt…

搭建Winmail邮件服务器

随着网络的发展和普及&#xff0c;电子邮件已经成为人们日常工作中不可缺少的部分&#xff0c;许多企业采用 Exchange、 Lotus Domino 作为公司内部的邮件服务器&#xff0c;一些 ISP 采用 sendmail (一个著名的 Unix/Linux 系统上的邮件服务器软件)或者其他的一些基于 Unix/Li…

spring cloud 之 openFeign

Feign和openFeign Feign Fegin使java Http客户端更加方便简洁&#xff0c; Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用&#xff0c;只不过对原有的方式&#xff08;RibbonRestTemplate&#xff09;进行了封装&#xff0c;开发者不必手动使用RestTemplate调…

php验证返回值,关于ThinkPHP 3.2.3 自动验证返回值

使用 ThinkPHP 自动验证&#xff0c; create() 返回始终很奇怪&#xff0c;通过验证返回一个空数组&#xff0c;未通过验证返回 false&#xff0c;getError() 中也能获取到错误&#xff0c;可这样就没办法判断是否正确了。难道还要判断 create() 的返回值 is_array() &#xff…

Swift学习Day02(基础语法—)

为什么80%的码农都做不了架构师&#xff1f;>>> swift 基础(—) swift 是一门类型安全的语言&#xff1b;Swift 的类型是在 C 和 Objective-C 的基础上提出的&#xff0c;Int是整型&#xff1b;Double和Float是浮点型&#xff1b;Bool是布尔型&#xff1b;String是…