C#,二项式系数(Binomial Coefficient)的七种算法与源代码

1 二项式系数(binomial coefficient)

二项式系数(binomial coefficient),或组合数,在数学里表达为:(1 + x)ⁿ展开后x的系数(其中n为自然数)。从定义可看出二项式系数的值为整数。

二项式系数表为在我国被称为贾宪三角或杨辉三角,一般认为是北宋数学家贾宪所首创。
它记载于杨辉的《详解九章算法》(1261)之中。
在阿拉伯数学家卡西的著作《算术之钥》(1427)中也给出了一个二项式定理系数表,他所用的计算方法与贾宪的完全相同。
在欧洲,德国数学家阿皮安努斯在他1527年出版的算术书的封面上刻有此图。
但一般却称之为帕斯卡三角形,因为帕斯卡在1654年也发现了这个结果。
无论如何,二项式定理的发现,在我国比在欧洲至少要早300年。
1665年,牛顿把二项式定理推广到n为分数与负数的情形,给出了展开式。
二项式定理在组合理论、开高次方、高阶等差数列求和,以及差分法中有广泛的应用。

2 7种计算方法的源代码

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class Algorithm_Gallery{public static int Binomial_Coeffient(int n, int k){if (k > n){return 0;}if (k == 0 || k == n){return 1;}return Binomial_Coeffient(n - 1, k - 1) + Binomial_Coeffient(n - 1, k);}public static int Binomial_Coeffient_Second(int n, int k){int[,] C = new int[n + 1, k + 1];for (int i = 0; i <= n; i++){for (int j = 0; j <= Math.Min(i, k); j++){if (j == 0 || j == i){C[i, j] = 1;}else{C[i, j] = C[i - 1, j - 1] + C[i - 1, j];}}}return C[n, k];}public static int Binomial_Coeffient_Third(int n, int k){int[] C = new int[k + 1];C[0] = 1;for (int i = 1; i <= n; i++){for (int j = Math.Min(i, k); j > 0; j--){C[j] = C[j] + C[j - 1];}}return C[k];}private static int Binomial_Coeffient_Utility(int n, int k, List<int>[] dp){if (dp[n][k] != -1){return dp[n][k];}if (k == 0){dp[n][k] = 1;return dp[n][k];}if (k == n){dp[n][k] = 1;return dp[n][k];}dp[n][k] = Binomial_Coeffient_Utility(n - 1, k - 1, dp) + Binomial_Coeffient_Utility(n - 1, k, dp);return dp[n][k];}public static int Binomial_Coeffient_Fourth(int n, int k){List<int>[] dp = new List<int>[n + 1];for (int i = 0; i < (n + 1); i++){dp[i] = new List<int>();for (int j = 0; j <= k; j++){dp[i].Add(-1);}}return Binomial_Coeffient_Utility(n, k, dp);}public static int GCD(int a, int b){if (b == 0){return a;}return GCD(b, (a % b));}public static int Binomial_Coeffient_Fifth(int n, int r){if (r > n){return 0;}if (r > n - r){r = n - r;}int mod = 1000000007;int[] arr = new int[r];for (int i = n - r + 1; i <= n; i++){arr[i + r - n - 1] = i;}long ans = 1;for (int k = 1; k < r + 1; k++){int j = 0, i = k;while (j < arr.Length){int x = GCD(i, arr[j]);if (x > 1){arr[j] /= x;i /= x;}if (i == 1){// If i becomes 1, no need// to search arrbreak;}j += 1;}}foreach (int i in arr){ans = (ans * i) % mod;}return (int)ans;}private static long pow(long b, long exp, long mod){long ret = 1;while (exp > 0){if ((exp & 1) > 0){ret = (ret * b) % mod;}b = (b * b) % mod;exp >>= 1;}return ret;}public static int Binomial_Coeffient_Sixth(int n, int r){if (r > n){return 0;}if ((n - r) > r){r = (n - r);}int[] SPF = new int[n + 1];for (int i = 1; i <= n; i++){SPF[i] = i;}for (int i = 4; i <= n; i += 2){SPF[i] = 2;}for (int i = 3; i * i < (n + 1); i += 2){if (SPF[i] == i){for (int j = i * i; j < (n + 1); j += i){if (SPF[j] == j){SPF[j] = i;}}}}Dictionary<int, int> prime_pow = new Dictionary<int, int>();for (int i = r + 1; i < (n + 1); i++){int t = i;while (t > 1){if (prime_pow.ContainsKey(SPF[t])){prime_pow[SPF[t]] = prime_pow[SPF[t]] + 1;}else{prime_pow.Add(SPF[t], 1);}t /= SPF[t];}}for (int i = 1; i < (n - r + 1); i++){int t = i;while (t > 1){if (prime_pow.ContainsKey(SPF[t])){prime_pow[SPF[t]] = prime_pow[SPF[t]] - 1;}t /= SPF[t];}}long ans = 1;long mod = 1000000007;foreach (int i in prime_pow.Keys){ans = (ans * pow(i, prime_pow[i], mod)) % mod;}return (int)ans;}public static int Binomial_Coeffient_Seventh(int n, int r){if (r > n){return 0;}long m = 1000000007;long[] inv = new long[r + 1];inv[0] = 1;if (r + 1 >= 2){inv[1] = 1;}for (int i = 2; i <= r; i++){inv[i] = m - (m / i) * inv[(int)(m % i)] % m;}int ans = 1;for (int i = 2; i <= r; i++){ans = (int)(((ans % m) * (inv[i] % m)) % m);}for (int i = n; i >= (n - r + 1); i--){ans = (int)(((ans % m) * (i % m)) % m);}return ans;}}
}

————————————————————

POWER BY TRUFFER.CN
BY 315SOFT.COM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

立体库库存数量统计(SCL代码)

立体库库存物体检测由光电开关完成&#xff0c;每个储物格都有一个检测光电。5*6的仓库需要30个光电检测开关组成检测矩阵。找出矩阵中的最大元素并返回其所在的行号和列号和我们今天介绍的算法有很多相似的地方&#xff0c;大家可以对比学习。具体链接地址如下&#xff1a; h…

机器学习3----决策树

这是前期准备 import numpy as np import pandas as pd import matplotlib.pyplot as plt #ID3算法 #每个特征的信息熵 # target : 账号是否真实&#xff0c;共2种情况 # yes 7个 p0.7 # no 3个 p0.3 info_D-(0.7*np.log2(0.7)0.3*np.log2(0.3)) info_D #日志密度…

算法学习——LeetCode力扣回溯篇4

算法学习——LeetCode力扣回溯篇4 332. 重新安排行程 332. 重新安排行程 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票…

Vulnhub靶机:DC4

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;DC4&#xff08;10.0.2.57&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/dc-4,313/…

Midjourney绘图欣赏系列(一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

【从Python基础到深度学习】7. 使用scp命令实现主机间通讯

一、生成 SSH 密钥对 ssh-keygen 是一个用于生成 SSH 密钥对的命令行工具&#xff0c;用于身份验证和加密通信 ssh-keygen 二、将本地主机上的 SSH 公钥添加到远程主机 ssh-copy-id 命令用于将本地主机上的 SSH 公钥添加到远程主机上的 authorized_keys 文件中&#xff0c;…

【初学者必看】迈入Midjourney的艺术世界:轻松掌握Midjourney的注册与订阅!

文章目录 前言一、Midjourney是什么二、Midjourney注册三、新建自己的服务器四、开通订阅 前言 AI绘画即指人工智能绘画&#xff0c;是一种计算机生成绘画的方式。是AIGC应用领域内的一大分支。 AI绘画主要分为两个部分&#xff0c;一个是对图像的分析与判断&#xff0c;即…

QlikSense财务聚合函数:IRR/NPV/XIRR/XNPV

IRR - 脚本函数 IRR() 函数用于返回聚合内部回报率&#xff0c;以揭示迭代于 group by 子句定义的大量记录上的表达式的数值表示的现金流系列。 这些现金流不必是均值&#xff0c;因为它们可用于年金。但是&#xff0c;现金流必须定期出现&#xff0c;例如每月或每年。内部收…

《合成孔径雷达成像算法与实现》Figure6.12

clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.7; % 距离过采样率 Nrg 320; % 距离线采样数 距离向…

【头歌·计组·自己动手画CPU】三、存储系统设计(HUST)(理论版) 【计算机硬件系统设计】

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 文章目录 一、课程设计目的二、课程设计内容三、课程设计步骤四、课程设计总结 一、课程设计目的 理解计算机…

猫头虎分享:2024年值得程序员关注的技术发展动向分析

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

HarmonyOS鸿蒙学习基础篇 - Column/Row 组件

前言 Row和Column组件是线性布局容器&#xff0c;用于按照垂直或水平方向排列子组件。Row表示沿水平方向布局的容器&#xff0c;而Column表示沿垂直方向布局的容器。这些容器具有许多属性和方法&#xff0c;可以方便地管理子组件的位置、大小、间距和对齐方式。例如&#xff0c…

从C向C++7——继承

一.继承 1.理解继承 C中的继承是类与类之间的关系&#xff0c;是一个很简单很直观的概念&#xff0c;与现实世界中的继承类似&#xff0c;例如儿子继承父亲的财产。 继承可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A&#xff0c;那么 B 就…

Codeforces Round 924(Div.2) A~E

A.Rectangle Cutting (模拟) 题意&#xff1a; 给出一个长方形&#xff0c;通过平行于原始矩形的一条边进行切割&#xff0c;将该矩形切割成两个边长为整数的矩形。询问是否能通过旋转和移动这两个矩形&#xff0c;得到新的矩形。 分析&#xff1a; 可以发现拼成的新长方形…

Python算法探索:从经典到现代(三)

一、引言 随着信息技术的飞速发展&#xff0c;数据已经成为现代社会不可或缺的资源。Python&#xff0c;作为数据处理和分析的利器&#xff0c;为我们提供了大量强大的库和工具&#xff0c;用于从经典到现代的各种算法探索。本文将带你领略Python在算法领域的魅力&#xff0c;从…

COW AI接入到微信 保姆教程 (部署在服务器,插件安装)

此文章不涉及国外的AI模型&#xff0c;也无需翻墙&#xff0c;跟某AI模型无关&#xff0c;审核大哥别弄错了 最近的AI开始越开越火了&#xff0c;开始介入到我们生活中的方方面面。就有人好奇AI是否能接入到微信吗&#xff1f;我在GitHub上搜索的时候还真有除了对话外还可以通…

MySQL 基础知识(五)之数据增删改

目录 1 插入数据 2 删除数据 3 更改数据 创建 goods 表 drop table if exists goods; create table goods ( id int(10) primary key auto_increment, name varchar(14) unique, stockdate date )charsetutf8; 1 插入数据 当要插入的数据为日期/时间类型时&#xff0c;如果…

Spring Boot 笔记 021 项目部署

1.1 引入坐标&#xff0c;并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新&#xff08;略&#xff09; 2.1.3 外部配置文件&#xff0c…

日期类运算符重载以及const成员详细解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.前言 二.运算符重载 2.1概念 2.2比较的符号重载 2.2.1…

ZBX_NOTSUPPORTED: Unsupported item key. 原因排查

进行自定义监控项时&#xff0c;在zabbix-agent端测试没问题&#xff0c;却在zabbix-server进行测试时&#xff0c;出现 ZBX_NOTSUPPORTED: Unsupported item key. 1.在zabbix-agent测试没问题&#xff0c;证明自定义监控项的脚本没问题&#xff0c;却在zabbix-server端测试出…