想必大家都知道n!很容易爆long long吧,n = 23時(unsigned long long)也束手無策。但很多時候我們又要用到n!
1) 牛客網:
題意:求n!在8進製下的位數。
思路:我們求乙個10進製數的位數時怎麼求,log10(n)+1就是答案。同理,log8(n!)+1就是此題的解。
ac**:
2)牛客網:#include#include#include#define e exp(1)
using namespace std;
double pi=acos(-1.0);
int main()
int ans= (log10(2*n*pi)/2+n*log10(n/e))/log10(8) ;//對數的性質+斯特靈公式
printf("%d\n",ans+1);
}return 0;
}
題意很清楚。
思路:用斯特靈公式表示n!,對兩邊去對數,再二分找n值。
ac**:
#include#includeusing namespace std;
typedef long long ll;
double e = exp(1);
double pi=acos(-1.0);
inline double stirling(ll n) //斯特靈公式取對數
int main()
if(stirling(mid)
else r=mid-1;}}
return 0;
}
斯特林公式
斯特林公式是一條用來取n階乘近似值的數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特靈公式十分好用。斯特林公式可以用來估算某數的大小,結合lg可以估算某數的位數,或者可以估算某數的階乘是另乙個數的倍數。stirling公式的意義在於 當n足夠大時,n 計算起來十分困難,雖然有很多關...
斯特林公式
斯特林公式的常見表示形式 顯而易見,這個公式主要是用來求近似的階乘的值的,在競賽中往往只採用第乙個形式,其精確度已經足夠用來求階乘位數了.lg n lg 2 n 2 n lg n lg e 這個公式就是圖中第乙個式子左右同時求對數得到的.不難發現,10x,10 x 1 之間囊括了所有長度為x 1的數...
斯特林公式
夫夫有一天對乙個數有多少位數感興趣,但是他又不想跟凡夫俗子一樣,所以他想知道給乙個整數n,求n!的在8進製下的位數是多少位。第一行是乙個整數t 0示例1 3425 2 13 include using namespace std const long double pi 3.141592653589...