牛客oi賽制測試賽F——假的數學遊戲【數論,二分】
阿新 • • 發佈:2018-12-01
連結:https://www.nowcoder.com/acm/contest/185/F
來源:牛客網
輸入一個整數X,求一個整數N,使得N!恰好大於XX。
輸入描述:
第一行:一個整數X
輸出描述:
第一行:一個整數N
示例1
輸入
7
輸出
10
備註:
每個測試點所對應的X滿足: 第i個測試點輸入的值為第i-1個測試點輸入的值乘以10再加上7。 特別的,第一個測試點所輸入的值為7。 提示:資料共有10組。
這道題考察斯特林公式的應用,關於斯特林公式我們可以參考一下這篇部落格斯特林公式,然後我們為了繼續縮小搜尋範圍我們可以對方程兩邊同時log一下,最好以e為底,之前一直以10為底樣例總是過90%,然後我們設定好上界和下界,通過不斷縮小上界找出最小值。
#include <bits/stdc++.h> using namespace std; #define pi acos(-1.0) #define e exp(1) int main(){ long long x; while(~scanf("%lld",&x)){ long long left = 1, right = 1e12; long long minn = 1; double ans = log10(x)*x; while(left <= right){ long long mid = (left + right) / 2; if(log10(sqrt(2*pi*mid)) + mid*log10(mid/e) > ans){ minn = mid; right = mid - 1; } else left = mid + 1; } printf("%d\n",minn); } return 0; }