hdu1018--斯特灵公式

斯特灵公式 Wiki http://zh.wikipedia.org/wiki/斯特林公式

/** \brief hdu 1018
 *
 * \param date 2014/7/24
 * \param state AC
 * \return
 *
 */

#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

const double PI=3.1415926;

int main()
{
    //cout << "Hello world!" << endl;
    //freopen("input.txt","r",stdin);
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        int n;
        cin>>n;
        int digits=(int)((0.5*log(2*PI*n)+n*log(n)-n)/log(10));
        cout<<digits+1<<endl;
    }
    return 0;
}
时间: 2024-10-12 16:12:01

hdu1018--斯特灵公式的相关文章

Lucas定理 、斯特灵公式

斯特灵公式是一条用来取n阶乘的近似值的数学公式. 公式为: 用该公式我们可以用来估算n阶乘的值:估算n阶乘的在任意进制下的位数. 如何计算在R进制下的位数:我们可以结合对数来计算,比如十进制就是lg(n!)+1,二进制则是log2(n!)+1. Lucas(卢卡斯)定理 公式为:(p为质数) 当然,当n较小时,我们可以用组合数里面的定理来递推求解. 然而当n较大时,显然时间花费很大.而Lucas定理恰好是解决大组合数取模的优解. 在这里由于知识有限,不能完全看懂Lucas定理证明的全部过程.所以

贝叶斯(Bayes)公式 推倒

1. 贝叶斯(Bayes)公式   设A, B1, …, Bn为一些事件,B1, …, Bn互不相交,P(Bi)>0,i=1,…n, 且∑nk=1P(Bi)=1, 则对k=1,…,n, (1) P(Bi) i=1,…,n,称为先验概率,P(Bi|A) i=1,…,n,称为后验概率 2. 贝叶斯推倒 1>全概率公式 B1,B2,…,Bn互不相交,,且P(Bi)>0,i=1, …, n, 则对任一事件A有 (2) 2>条件概率定义 A, B为事件且P(A)>0, 条件概率P(A|

hdu 2521 一卡通大冒险 (斯特灵数,贝尔数)

/* 将N张卡分成若干个集合,集合不为空,有多少种分法. f[n][m]表示n张卡分成m组的种类数,那么f[n][m]=f[n-1][m-1]+f[n-1][m]*m,//第二类斯特灵数 而ans[n]=sum{f[n][l]}(1<=l<=m).//ans为贝尔数,Bell数是将P个元素集合分到非空且不可区分例子的划分个数. 其中:f[n-1][m-1]代表第n个人自成一堆: f[n-1][m]*m代表第n个人不自成一堆. */ # include <stdio.h> # inc

HDU2512 一卡通大冒险【斯特灵数,贝尔数】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2512 题目大意: 有N张卡,将N张卡分成若干不同的集合,集合不能为空.问:总共有多少种分法. 思路: 参考博文:http://blog.csdn.net/acm_cxlove/article/details/7857671 集合的个数可以为1.2.3.-.N.问题就变为了把N张卡放到i个集合中. 这时候个组合问题,可以用第二类斯特灵数解决. S(P,K) = S(P-1,K-1) + K*S(P-

UVA 10844 - Bloques (第二类斯特灵数)

UVA 10844 - Bloques 题目链接 题意:给定n个数字,问这n个数字能分成子集分成有几种分法 思路:一开始先想了个状态,dp[i][j]表示放i个数字,分成j个集合的方案,那么转移为,从dp[i - 1][j - 1]在多一个集合,和从dp[i - 1][j]有j个位置放,那么转移方程为dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] * j;按理说这个状态转移是没问题的,但是由于这题答案是高精度,n为900时答案高达1700多位,加上高精度运算

挑战程序设计竞赛 划分数,贝尔数,斯特灵数

斯特灵数:把n个数划分为恰好k个非空集合的个数,记为S(n,k).且有:S(n,1)=S(n,n)=1. 有递推关系式: S(n+1,k)=S(n,k?1)+kS(n,k?1) 贝儿数:把n个数划分为非空集合的所有划分数.有: Bn=∑i=0nS(n,i) 贝尔数的递推公式: Bn=∑k=0n(nk)Bk 书上的划分数:书上求的是:把n个相同的数划分为不超过m个集合的方法总数.由于这n个数是相同的,就不能算作∑ki=0S(n,i).书上给了这样一个dp的转移方程(定义dp[i][j]为j个数的i

counting the buildings - 第一类斯特灵数

2017-08-10 21:10:08 writer:pprp //TLE #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; typedef long long

Examining the Rooms - 第一类斯特灵数

---恢复内容开始--- 2017-08-10 20:32:37 writer:pprp 题意如下: Recently in Teddy's hometown there is a competition named "Cow Year Blow Cow".N competitors had took part in this competition.The competition was so intense that the rank was changing and changi

求一个数阶乘的位数

flyfish 2015-8-15 例如 7!=5040 ,7的阶乘结果是4位数(10进制) 求一个数的位数 1 循环方法 int get_digit_loop(int N) { int digit = 0; do { digit ++; } while ((N /= 10) > 0); return digit; } 2 递归方式 int get_digit_recursion(int N) { int digit = 0; digit = N < 10 ? 1 : 1 + get_digi