阶乘(factorial)
又称为阶乘函数,是数学中的一个重要概念。它表示一个正整数n与小于或等于它的所有正整数的乘积,通常以符号“n!”表示。在数学领域中,阶乘是一个广泛应用的概念,常常出现在排列组合、概率统计、数论等诸多领域中。
目录
阶乘(factorial)
1. 阶乘的定义
2. 阶乘的性质和应用
3. 阶乘的计算方法
(1) 用递归方式计算阶乘:
(2) 用循环方式计算阶乘:
(3) 用高精度算法计算阶乘:
4. [拓展] 双阶乘的概念
5. 结束语
1. 阶乘的定义
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作 n! 。
1808年,基斯顿·卡曼 引进这个表示法,即 n! = 1×2×3×...×(n-1)×n 。
阶乘的定义非常简单,即n的阶乘 (n!) 等于小于或等于n的所有正整数的乘积。
2. 阶乘的性质和应用
阶乘具有以下几个性质:
(1):0的阶乘为1(0! = 1)。
(2):负整数以及分数没有阶乘的定义。
(3):阶乘增长非常快,随着n的增大,n!的值急剧增加。
阶乘在排列组合、概率统计、数论等领域有广泛的应用。
在排列组合中,阶乘用于计算有序的元素排列的方式数量。
例如,从n个元素中选取m个元素进行排列,可表示为 n!/(n-m)! ,即从n个元素中任选m个元素进行排列的不同方式数量。
从n个元素中选取m个元素进行组合,可表示为 n!/(n-m)!/m! ,即将其进行排列的结果除以m的阶乘,表示n个元素中任选m个元素进行组合的不同方式数量。
在概率统计中,阶乘用于计算排列组合方式的概率。例如,在一副扑克牌中,从中抽取5张牌的顺序不同的可能性就可以表示为5!。
在数论中,阶乘与素数、除法取模运算等概念有密切关联。例如,通过阶乘可以证明除法取模定理:对于任意的正整数n和素数p,n!模p的结果等于0。
3. 阶乘的计算方法
计算阶乘的方法可以通过递归或循环来实现。递归是一种将大问题分解为小问题的方法,通过反复调用自身来解决问题。用递归计算阶乘的公式为: 0! = 1 , n! = n×(n-1)! 。
(1) 用递归方式计算阶乘:
#include <bits/stdc++.h>using namespace std;int fact(int n){ if(n==0) return 1; return n * fact(n-1);}int main(){ int n; scanf("%lld",&n); printf("%d",fact(n)); return 0;}
另一种常见的计算阶乘的方法是使用循环,从1到n逐步累乘得到阶乘的结果。
(2) 用循环方式计算阶乘:
#include <bits/stdc++.h>using namespace std;int main(){ int n,s=1; scanf("%lld",&n); for(int i=1;i<=n;i++){ s*=i; } printf("%d",s); return 0;}
但是,由于阶乘的增长特别快,13的阶乘( 6227020800 ) 就会超出 C++ 中int的数据范围(2147483647), 而21的阶乘( 51090942171709440000 ) 就会超出 C++ 中long long的数据范围(9223372036854775807), 具体数值可以看这篇博客 [阶乘表 1-100阶乘] , 所以,使用普通的数据类型无法计算较大数的阶乘。
这里就需要用到高精度算法(High Accuracy Algorithm)了。
(3) 用高精度算法计算阶乘:
#include<bits/stdc++.h>using namespace std;const int N=10000;int a[N];int main(){a[1]=1;int c=1,t=0,xxx,n;scanf("%d",&n);if(n<2){printf("%d",1);return 0;}for(int i=2;i<=n;i++){for(int j=1;j<=c;j++){xxx=a[j]*i+t;a[j]=xxx%10;t=xxx/10;}while(t){c++;a[c]=t%10;t/=10;}}for(int i=c;i>0;i--) printf("%d",a[i]);return 0;}
4. [拓展] 双阶乘的概念
双阶乘(即二次阶乘)是在阶乘的基础上的一个扩展概念。双阶乘表示对小于等于正整数n的所有奇数进行乘积。通常用符号“ n!! ”表示。
双阶乘的计算方法与阶乘类似,但考虑的元素不同,双阶乘只考虑奇数。通过递归或循环,将n的阶乘的奇数部分相乘得到双阶乘的结果。
双阶乘有其特殊的应用场景。例如,在组合数学中,双阶乘被用于计算排列组合的可能性。特别地,双阶乘在计算卡特兰数(Catalan number)时起到重要作用,卡特兰数表示在特定条件下有效的排列组合的数量。
5. 结束语
阶乘是数学中一个常用的概念,其定义是将一个正整数与小于或等于它的所有正整数相乘。阶乘的计算可以通过递归或循环来实现。阶乘具有多种性质和应用,常用于排列组合、概率统计和数论中。双阶乘是对小于等于正整数n的所有奇数进行乘积,其计算方法和阶乘类似。双阶乘在计算卡特兰数等应用中有特殊的作用。
今天的内容就到这里,创作不易,请大家多多支持博主! [ 点赞+收藏+关注 ]