斯特林公式--求高阶乘阶及其位数
2018-02-08 11:26
369 查看
1.知识准备<1>cmath中自带对数函数:double log(double x);//返回logex的值
double log10(double x) 返回log10x的值其他对数需要根据公式:
来define转换2.关于斯特林公式:斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用。从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确。公式为:
更加准确的极限:
或者
!!!注意:如果要知道N!后得到的数字为几位数,则我们可以知道其位数等于lgN!+1;通常的简化是:
此处的斯特林公式对于n很大时就给出了简化:
于是:n!位数为:[lgn!]+1=
3.例题:链接:https://www.nowcoder.net/acm/contest/75/A
来源:牛客网
夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。输入描述:
double log10(double x) 返回log10x的值其他对数需要根据公式:
来define转换2.关于斯特林公式:斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用。从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确。公式为:
更加准确的极限:
或者
!!!注意:如果要知道N!后得到的数字为几位数,则我们可以知道其位数等于lgN!+1;通常的简化是:
此处的斯特林公式对于n很大时就给出了简化:
于是:n!位数为:[lgn!]+1=
3.例题:链接:https://www.nowcoder.net/acm/contest/75/A
来源:牛客网
夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。输入描述:
第一行是一个整数t(0<t<=1000000)(表示t组数据) 接下来t行,每一行有一个整数n(0<=n<=10000000)
输出描述:
输出n!在八进制下的位数!——————————————————————————————————————————————————思路:n很大,所以直接求肯定不可能,只能使用斯特林公式,注意这里是八进制,因此要把long10变为log8即可!!代码:#include <iostream> #include <math.h> #include<cstdio> #define PI acos(-1)//Π=acos(-1)=3.1415926 #define E 2.7182818284//e=2.7182 #define log8(x) log10(x)/log10(8.0)//重点!!define套用数学公式定义log8! using namespace std; int main() { int T; cin>>T; while(T--) { int n; scanf("%d",&n); if(n==0)//0的时候不能用斯特林,因为log8(0)无意义,因此单独处理! printf("1\n"); else { unsigned long long int ans=(unsigned long long int)((log8(2*PI)+log8(n))/2+n*(log8(n)-log8(E)));//注意强制转换 printf("%llu\n",ans+1); } } return 0; }坑点:用peintf和scanf不会超时,而用cin,cout会超时!
相关文章推荐
- ACM算法_斯特林公式求N的阶乘的位数
- 斯特林公式求 n! 和 n!在m阶乘下的位数
- HDOJ---1018 求N!的位数[斯特林公式---处理阶乘及阶乘位数的问题]
- Snow祝你元宵节快乐!(斯特林公式求阶乘的位数)
- 斯特林公式近似求阶乘的位数
- HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】
- HDOJ1018 Big Number(斯特林公式求阶乘位数)
- A 不凡的夫夫(阶乘位数 斯特林公式)
- HDU 1018 阶乘的位数 stirling公式
- hdu-1018Big Number(阶乘求位数)
- Light oj 1045 (求某个数的阶乘在x进制下的位数)
- N的阶乘的长度(斯特林公式)
- 求大数阶乘位数方法
- 斯特林公式求大数位数
- 51nod 1130 1157 求阶乘结果长度(斯特林公式)
- 斯特林公式(n的阶乘近似)
- hdu 1018 求大数阶乘位数有公式
- LightOJ - 1045 求N!在k进制下的的位数(斯特林公式)
- NYOJ 69 阶乘位数长度
- 求大数阶乘的位数(ACM Big Number问题)