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…

Vue中@change、@input和@blur的区别及@keyup介绍

Vue中change、input和blur、focus的区别及keyup介绍 1. change、input、blur、focus事件2. keyup事件3. 补充&#xff1a;el-input的change事件自定义传参 1. change、input、blur、focus事件 change在输入框发生变化且失去焦点后触发&#xff1b; input在输入框内容发生变化后…

conda env退回到之前的版本

默认显示的是 base 环境的历史记录 conda list --revisions 回到第 N 个版本 conda install --revision N 显示指定环境的修改记录 conda list -n env_name -r

机器学习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 #日志密度…

Rust 原生类型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、标量类型&#xff08;scalar type&#xff09;二、 复合类型&#xff08;compound type&#xff09;总结 前言 Rust 学习系列 &#xff0c;rust中的原生类…

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

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

django中的中间件

在Django中&#xff0c;中间件&#xff08;Middleware&#xff09;是一个轻量级的、底层的“插件”系统&#xff0c;用于全局地修改Django的输入或输出。每个中间件组件都负责执行一些特定的任务&#xff0c;比如检查用户是否登录、处理日志、GZIP压缩等。Django的中间件提供了…

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;即…

MySQL定时备份及清理脚本(一劳永逸)-改良版本

一 创建备份路径 cd /mysql-backup mkdir back cd back 二 创建日志文件 vi mysql-backlog.log 内容为空&#xff0c;保存 三 创建备份脚本 vi save-all-data.sh#!/bin/bash #source /etc/profile user"root" password"LXYlxy2:024.#8u}" host"127…

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

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

LeetCode879. Profitable Schemes——动态规划

文章目录 一、题目二、题解 一、题目 There is a group of n members, and a list of various crimes they could commit. The ith crime generates a profit[i] and requires group[i] members to participate in it. If a member participates in one crime, that member ca…

《合成孔径雷达成像算法与实现》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 就…

共享指针在项目中实际的用法

共享指针是 C 中一种智能指针&#xff0c;用于管理动态内存。它可以有效防止内存泄漏和悬空指针问题。在实际项目中&#xff0c;共享指针有以下几种常见的用法&#xff1a; 1. 管理对象的生命周期 共享指针可以用来管理对象的生命周期。当最后一个共享指针指向的对象时&#…