51nod1130---斯特林公式
题目链接:51nod1130
求位数公式是 log10(n)+1 然后此题让求的是n的阶乘的位数
那么很多同学会想到 log0(N!)=log10(1*2*3...*N)+1 = log10(1)+log(2)+log(3)+....+log(N)+1
但是这道题N最大是1e9 所以这种方法肯定会超时 所以我们需要用新的方法
斯特林公式能够近似的求出n的阶乘的值 然后我们再用 求位数公式 log10(n)+1就可以求出答案
斯特林公式 sqrt( 2*pi*n ) * pow( n/e , n)
斯特林公式
而且 log10()内的乘法 又可以转化为加法 那么我们就可以对斯特林公式优化为
0.5 * log10( 2*PI*n ) + n*log10( n/e )
要注意 公式里用到了 e 和 π 我们定义他们有两种写法
#define PI acos(-1.0)
#define E exp(1.0)const double e = 2.718281828459;
const double pi = 3.1415926535;
建议大家使用第一种
exp()是e的指数幂 括号内是double型 返回值也是double e(1.0)=e^1=e ,e(-1.0)=e^-1
acos()是反三角函数 括号内是double型 返回值也是double acos(-1.0)=π
尤其是这道题 数据特别的卡 刚开始 我定义e =2.71828182845; 疯狂的wa wa了七八遍后 我又多加了一位e =2.718281828459 就对了。。。
所以 由于有的时候 我们不知道数据需要几位 用赋值的定义方式就可能出错
代码
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;
#define PI acos(-1.0)
#define E exp(1.0)
const double e = 2.718281828459;
const double pi = 3.1415926535;
int T;
double n;
int main(){scanf("%d",&T);while(T--){scanf("%lf",&n);ll ans=(ll)(0.5*log10(2*PI*n) + n*(log10(n/E)) +1);printf("%I64d\n",ans);}return 0;
}
51nod1130---斯特林公式相关推荐
- 斯特林公式(Stirling's approximation)
斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候, ...
- 【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)
题干: 输入描述: 第一行:一个整数X 输出描述: 第一行:一个整数N 示例1 输入 复制 7 输出 复制 10 备注: 每个测试点所对应的X满足:第i个测试点输入的值为第i-1个测试点输入的值乘以1 ...
- 阶乘与 pi 的关系 —— 斯特林公式(Stirling formula)
Stirling's Formula n!≈2πn−−−√(ne)n n!\approx \sqrt{2\pi n}\left(\frac{n}{e}\right)^n (1)斯特林公式是阶乘的逼近公 ...
- 斯特林公式--求n!的位数
斯特林公式: #include<stdio.h> #include<math.h> int main(void) {int T;double n;scanf("%d& ...
- 1018Big Number用斯特林公式的简化公式和不用公式解决
1018http://acm.hdu.edu.cn/showproblem.php?pid=1018 在其中要体现一下几个问题: 一.一个整数的位数计算 二.优化算法 设有一个整数n,且10x-1≤n ...
- HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】
1:把n!写成10^m次方的形式,如果m=2,就说明是三位数. [维基百科] [别处摘来的]可以将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小 ...
- 【高等数学】伽马函数与斯特林公式
伽马函数的背景 1728年,哥德巴赫在考虑数列插值的问题,通俗的说就是把数列的通项公式定义从整数集合延拓到实数集合,例如数列1,4,9,16-可以用通项公式n²自然的表达,即便 n 为实数的时候, ...
- 不凡的夫夫 斯特林公式的应用
链接:https://www.nowcoder.com/acm/contest/75/A 来源:牛客网 题目描述 夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样, 所以他想知道给一个整 ...
- 斯特林公式、沃利斯公式
目录 一,斯特林公式 1,公式 2,证明 3,更多项 4,变形 二,沃利斯公式 1,公式 2,变形 一,斯特林公式 1,公式 2,证明 3,更多项 用以上方法可以求出 的前任意多项. 4,变形 两边 ...
- 求N的阶乘长度(斯特林公式)
输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. 求N的阶乘长度 计算n!的公式是斯特林公式: 计算一个数的长度为 log10(n) +1 AC代码: /*** ┏┓ ┏┓+ + ...
最新文章
- 获取本机IP_考虑多网卡的情况
- Java io流---拷贝目录
- android车载娱乐系统场景,智能汽车、家庭娱乐系统、工业自动化场景中接口应用设计...
- 三包围结构的字是什么样的_男孩起名精选:搭配美观,结构合理的男宝宝名字...
- 前端3D轨迹可视化渲染
- 第十二周 项目一--图基本算法库
- 笔记本电脑共享WiFi
- 盘点2022年爆火的小程序游戏
- Flutter 之页面状态保持
- HDFS遍历子目录 Hadoop fs -ls -R path
- 读《沟通的方法》推荐序有感
- 迪文串口屏(DMG10600C101-03WTC)的使用测试
- 使用UAS-GAL4系统在果蝇中敲低某一基因的表达
- android老人字体变大,适合老年人用的安卓手机软件 一键让Android字体变大
- 苹果手机怎么用计算机打出字,iPhone输入法忽然打不出中文怎么办?收下这份指南日常打字如飞!...
- html 图片repeat,html中repeat技术分享
- 直击招聘程序员面试笔试C语言深度解析,直击招聘 程序员面试笔试C++语言深度解析(直击招聘) pdf epub mobi txt 下载...
- [go]Go语言编译器的 “//go:“ 详解
- python实验原理_【python】《统计学原理实验教程(Python)》书中代码实现
- 使用ReadyFor4GB