斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。

公式为:   

从图中看出,对于足够大的整数n,这两个数互为近似值。更加精确地:

       或者        

这个公式,以及误差的估计,可以推导如下。我们不直接估计n!,而是考虑它的自然对数:

按一般方法计算N的阶乘,其时间复杂度为O(N):    N!= 1 * 2 * 3 * 4 * 5 * ............ * N;

如果要计算N后得到的数字为几位数,则我们可以知道其位数等于lgN!+1;

则: 

但是当N很大的时候,我们可以通过斯特林公式进行优化:(即Stirling公式)

(e = 2.718)

斯特林公式可以用来估算某数的大小,结合lg可以估算某数的位数,或者可以估算某数的阶乘是另一个数的倍数。

例题:  http://acm.hdu.edu.cn/showproblem.php?pid=1018

题目给出的N的范围是: 1<= N <= 107

用普通方法肯定算不出N的阶乘后的出的数字位数,但运用斯特林公式则很好解决.

Stirling 公式

即:

Stirling公式的意义在于:当n足够大时,n!计算起来十分困难,虽然有很多关于n!的等式,但并不能很好地对阶乘结果进行估计,尤其是n很大之后,误差将会非常大。但利用Stirling公式可以将阶乘转化成幂函数,使得阶乘的结果得以更好的估计。而且n越大,估计得越准确。

利用Stirling公式求解n!的位数:易知整数n的位数为[lgn]+1。利用Stirling公式计算n!结果的位数时,可以两边取对数,得:

故n!的位数为:

再添加一道例题:

#include <bits/stdc++.h>
using namespace std;
#define e exp(1)
#define pi acos(-1)
double log8(double x) {return log(x)/log(8);//loga(b)=logc(b)/logc(a)
}
double strling(double n) {return log8(2*pi*n)/2.0+n*(log8(n/e));
}
int main() {int pp;scanf("%d",&pp);while (pp--) {int n;scanf("%d",&n);if (n==0) {puts("1");continue;}long long ans=(long long )strling(double(n));printf("%lld\n",ans+1);}return 0;
}

斯特林公式(Stirling's approximation)相关推荐

  1. 斯特林公式(Stirling's approximation)—对n!进行估值

    在看<算法导论>决策树求高度的时候用到斯特林公式对n!进行缩放,决策树的高度=Ω(nlgn) 斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数 ...

  2. 斯特林公式(Stirling)

    斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候, ...

  3. Stirling's approximation

    Stirling's approximation 是对 n ! n! n!趋于无穷速度的估计, 可扩展到对 Gamma function 的估计. 一般表达形式 n ! ∼ 2 π n ( n e ) ...

  4. 斯特林公式 (Stirling's approximation)

    斯特林公式n!=sqrt(2*PI*n)*(n/e)^n 转载于:https://www.cnblogs.com/Pos-Proteus/p/5350098.html

  5. 【数论】斯特林公式 ——Stirling公式(取N阶乘近似值)

    斯特灵公式是一条用来取n阶乘近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用.从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确. 公式为:    ...

  6. 斯特林公式 ——Stirling公式(取N阶乘近似值)(转)

    斯特灵公式是一条用来取n阶乘近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用.从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确. 公式为:    ...

  7. 斯特灵公式求阶乘c语言,斯特林公式 ——Stirling公式(取N阶乘近似值)

    基于UDP协议的socket编程示例 客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.D ...

  8. 2023年天津高考数学压轴题:Stirling‘s approximation

    我们用定积分的几何意义来尝试证明 注意到1/2这个系数,尝试使用梯形法而不是矩形法  这个就是不等式的右边 如何用严格的办法证明这个不等式而非几何意义. 过点(m, log(m)) 和(m+1,log ...

  9. 复平面上gamma函数_Gamma函数的那些事(3)——Gamma函数的应用

    往期目录:TravorLZH:Gamma函数的那些事儿(1)--定义​zhuanlan.zhihu.comTravorLZH:Gamma函数的那些事儿(2)--欧拉常数与Digamma函数​zhuan ...

最新文章

  1. LDO和DC-DC有什么不同?如何选型?
  2. 找ipcore的地方
  3. PHP关键字this指向当前对象指针
  4. xamarin跳转html,Xamarin 页面跳转
  5. django datetime format 日期格式化
  6. mysql的collate_MYSQL中的COLLATE是什么?
  7. Intent的一些简单用法
  8. cacti 监控添加插件
  9. 手机语音混响软件_手机混响软件 如何把微信里的语音转发出去 有什么好用的变声软件 安卓微信语音转发插件...
  10. 3D纹理贴图制软件The Foundry Mari for Mac
  11. 注销Apple ID的正确打开方式
  12. 19. shift,shift n,位置变量,命令行参数控制,shift语法,用法示例
  13. C# 实现俄罗斯方块
  14. Java项目:人才求职招聘管理系统(java+SpringBoot+FreeMarker+JPA+Mysql)
  15. 搜狗输入法怎样使用自定义短语
  16. 搭建阿里云物联网平台实现MQTT通信
  17. 西安交通大学学生邮箱设置
  18. comsol函数的使用(入门级教程)
  19. 报错:Cannot resolve org.openjfx:javafx.base:11.0.0-SNAPSHOT
  20. 学习 Python 之 Pygame 开发魂斗罗(八)

热门文章

  1. C语言 · 比较字符串
  2. Centos6.5环境中安装vsftp服务
  3. 键盘工具栏的快速集成--IQKeyboardManager
  4. 解决properties文件乱码问题(eclipse和MyEclipse)
  5. 关于jquery.AutoComplete插件的一些使用心得(编码问题,效率问题)
  6. Django入门:DoesNotExist: User matching query does not exist.
  7. 动图-完整清晰展示TCP的三次握手与四次挥手
  8. 科大星云诗社动态20210310
  9. 科大星云诗社动态20210522
  10. 通俗解释优化的线性感知机算法:Pocket PLA