51nod 1130 阶乘长度 [Stirling公式]
输出n!的位数
n! 约等于 根号下(2πn) * (n/e )^n
那么 res = 1/2*lg(2πn) + nlg(n/e) + 1
实测n很小也是正确的答案
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
using namespace std;
#define smax(x,tmp) x=max((x),(tmp))
#define smin(x,tmp) x=min((x),(tmp))
#define maxx(x1,x2,x3) max(max(x1,x2),x3)
#define minn(x1,x2,x3) min(min(x1,x2),x3)
const int INF=0x3f3f3f3f;
const double pi = M_PI;
const double e = M_E;
const double eps = 1e-7;
typedef long long LL;
inline LL get_res(int n)
{if(n<=10){int tot = 1;for(int i=1;i<=n;i++) tot *= i;return floor(log10(tot) + eps) + 1;}return floor(0.5*log10(2*pi*(double)n) + (double)n*log10((double)n/e) + eps) + 1;
}
int main()
{freopen("stirling.in","r",stdin);freopen("stirling.out","w",stdout);int cas;scanf("%d",&cas);while(cas--){int n;scanf("%d",&n);LL ans = get_res(n);printf(AUTO"\n",ans);}return 0;
}
公式链接:
http://m.blog.csdn.net/article/details?id=51145807
Summary:
cmath里面有π和e的精确值!!!!!!
51nod 1130 阶乘长度 [Stirling公式]相关推荐
- POJ_1423(Stirling公式)
求大数位数:log10()函数,本题规模太大,阶乘用Stirling公式求 Stirling公式: n! = ((2pin)(1/2))*((n/e)n); 前提是n > 3 由此可以导出: l ...
- 【数论】斯特林公式 ——Stirling公式(取N阶乘近似值)
斯特灵公式是一条用来取n阶乘近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用.从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确. 公式为: ...
- 斯特林公式 ——Stirling公式(取N阶乘近似值)(转)
斯特灵公式是一条用来取n阶乘近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用.从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确. 公式为: ...
- poj 1423 stirling公式(阶乘的位数)
题意:给定一个数(小于10^7),求这个数阶乘的位数. 思路:首先,求一个数n的位数可以用log10(n)向上取整来得到(10的整数次幂要特殊判断).所以所求由log10(1)+log10(2)+lo ...
- 求N的阶乘长度(斯特林公式)
输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. 求N的阶乘长度 计算n!的公式是斯特林公式: 计算一个数的长度为 log10(n) +1 AC代码: /*** ┏┓ ┏┓+ + ...
- Stirling公式(pku1423)
Stirling 公式 即: Stirling公式的意义在于:当n足够大时,n!计算起来十分困难,虽然有很多关于n!的等式,但并不能很好地对阶乘结果进行估计,尤其是n很大之后,误差将会非常大.但利用S ...
- Stirling公式
Stirling 公式 Stirling公式 1.阶乘 n!=n(n−1)(n−2)⋯×3×2×1(n≥1)n! = n(n-1)(n-2)\cdots\times3\times2\times1\qu ...
- Wallis公式Stirling公式Gamma函数
Wallis公式 (!!是双阶乘,不超过这个整数且具有相同奇偶的正整数相乘,比如5!!=1×3×5, 6!!=2×4×6) 利用Wallis公式推导Stirling公式 斯特林公式是一条用来取n阶乘近 ...
- Stirling公式 求n! 的位数
Stirling 公式 即: Stirling公式的意义在于:当n足够大时,n!计算起来十分困难,虽然有很多关于n!的等式,但并不能很好地对阶乘结果进行估计,尤其是n很大之后,误差将会非常大.但利用S ...
最新文章
- Netty with protobuf(二)
- Codeforces 38B - Chess
- 数据挖掘 pandas基础入门之查看数据
- OPENWRT挂载SWAP
- spring的aop名词解释
- 30分钟通过Kong实现.NET网关
- Bootstrap 图片的形状
- Oracle物理的体系结构
- 用web查看hadoop运行状态
- linux以下C 利用openssl的AES库加密,解密
- ubuntu16.04安装google中文输入法
- Spatial-Temporal时间序列预测建模方法汇总
- 掘金小册前端性能优化原理与实践读后总结
- 电脑上面的word文档被删除了怎么办?分享四种亲测恢复方法
- 精密划片机维护及保养
- 打印时去除页眉和页脚
- 【蓝桥单片机】51单片机(stc15f)的两个寄存器TCON和TMOD
- 利用scrapy爬取58同城租房信息
- 汉与匈奴 —— 影响世界之战
- 电脑如何修改关闭显示器和休眠时间