51nod 1130 N的阶乘的长度(阶乘近似公式--斯特林公式)
2015-09-03 19:24
507 查看
大致题意:
求n!有多少位,n<= 1e9 ,1000组数据
大致思路:
显然是企图求 lg(n!)+1 向下取整
显然求lg(n!) 展开的复杂度是On的
但是,他是求多少位,有n!的近似公式斯特林公式(Stirling's approximation)
维基百科:https://en.wikipedia.org/wiki/Stirling%27s_approximation
显然对于求对数函数来说精确度在n比较大的情况下必然满足。
Input
Output
Input示例
Output示例
求n!有多少位,n<= 1e9 ,1000组数据
大致思路:
显然是企图求 lg(n!)+1 向下取整
显然求lg(n!) 展开的复杂度是On的
但是,他是求多少位,有n!的近似公式斯特林公式(Stirling's approximation)
维基百科:https://en.wikipedia.org/wiki/Stirling%27s_approximation
显然对于求对数函数来说精确度在n比较大的情况下必然满足。
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostream> #include <cstring> #include <cmath> #include <queue> #include <stack> #include <map> #include <set> #include <string> #include <vector> #include <cstdio> #include <ctime> #include <bitset> #include <algorithm> #define SZ(x) ((int)(x).size()) #define ALL(v) (v).begin(), (v).end() #define foreach(i, v) for (__typeof((v).begin()) i = (v).begin(); i != (v).end(); ++ i) #define reveach(i, v) for (__typeof((v).rbegin()) i = (v).rbegin(); i != (v).rend(); ++ i) #define REP(i,n) for ( int i=1; i<=int(n); i++ ) #define rep(i,n) for ( int i=0; i< int(n); i++ ) using namespace std; typedef long long ll; #define X first #define Y second #define PB push_back #define MP make_pair typedef pair<int,int> pii; template <class T> inline bool RD(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0; while (c != '-' && (c<'0' || c>'9')) c = getchar(); sgn = (c == '-') ? -1 : 1; ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0'); ret *= sgn; return 1; } template <class T> inline void PT(T x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) PT(x / 10); putchar(x % 10 + '0'); } const double pi = acos(-1); int main(){ int T; RD(T); while( T--){ ll n; RD(n); ll ans = log10(2*pi*n)/2 + n*(log10(n/exp(1.0))); PT(ans+1); puts(""); } }
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000) 第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
Output
共T行,输出对应的阶乘的长度。
Input示例
3 4 5 6
Output示例
2 3 3
相关文章推荐
- ViewController里的loadView和viewDidLoad什么区别
- jquery ajax(实现单独提交某个form)
- JavaScript之取消计时器clearInterval()
- Spring Mail
- Maven Assembly插件介绍
- python内置函数zip
- EMAIL之SMTP应答序列
- Android学习之sharedpreferences加密
- 快速幂
- HDU 4730 We Love MOE Girls
- codeforces GYM 100114 J. Computer Network tarjan 树的直径 缩点
- 如何将maven项目打包成可执行的jar
- 获取BDUSS的简单方式
- maven 打包可执行jar的方法
- Javascript高级程序设计——面向对象小结
- Django的CSRF保护引起的403 FORBIDDEN
- 艺多不压身—摩尔斯电码
- Codeforces Gym 100114 H. Milestones 离线树状数组
- LeetCode之Longest Palindromic Substring
- 谈谈A*