結果
問題 | No.575 n! / m / m / m... |
ユーザー |
![]() |
提出日時 | 2017-11-07 15:17:16 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 13 ms / 2,000 ms |
コード長 | 2,287 bytes |
コンパイル時間 | 1,283 ms |
コンパイル使用メモリ | 117,100 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-24 04:46:15 |
合計ジャッジ時間 | 1,919 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
#include <algorithm>#include <iostream>#include <cstdio>#include <map>#include <numeric>#include <cmath>#include <set>#include <sstream>#include <string>#include <vector>#include <queue>#include <stack>#include <complex>#include <string.h>#include <unordered_set>#include <unordered_map>#include <bitset>#include <iomanip>#include <sys/time.h>#include <tuple>#include <random>using namespace std;#define endl '\n'#define ALL(v) (v).begin(), (v).end()#define RALL(v) (v).rbegin(), (v).rend()#define UNIQ(v) (v).erase(unique((v).begin(), (v).end()), (v).end())typedef long long ll;typedef long double ld;typedef pair<int, int> P;typedef complex<double> comp;typedef vector< vector<ld> > matrix;struct pairhash {public:template<typename T, typename U>size_t operator()(const pair<T, U> &x) const {size_t seed = hash<T>()(x.first);return hash<U>()(x.second) + 0x9e3779b9 + (seed<<6) + (seed>>2);}};const int inf = 1e9 + 9;const ll mod = 1e9 + 7;const double eps = 1e-8;const double pi = acos(-1);ll n, m;map<ll, int> prime_factor(ll n) {map<ll, int> res;for (ll i = 2; i * i <= n; i++) {while (n % i == 0) {res[i]++;n /= i;}}if (n != 1) res[n] = 1;return res;}ll calc(ll s) {ll k = 0;ll t = s;while (t <= n) {k += n / t;if (t * s < t) break;t *= s;}return k;}void solve() {map<ll, int> pf = prime_factor(m);ll k = 1e18;for (auto& t : pf) {k = min(k, calc(t.first)/ t.second);}if (n < 30) {double res = 1.0;for (ll i = n; i > 0; i--)res *= i;for (int i = 0; i < k; i++)res /= m;int b = 0;while (res >= 10.0) {b++;res /= 10;}cout << res << "e" << b << endl;} else {double exp = n * log(n) - n + 0.5 * log(2*pi*n) + 1.0 / (12*n);exp -= k * log(m);exp /= log(10);ll b = (ll)exp;cout << pow(10.0, exp - b) << "e" << b << endl;}}void input() {cin >> n >> m;}int main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(15);input();solve();}