結果
問題 |
No.1809 Divide NCK
|
ユーザー |
![]() |
提出日時 | 2024-11-30 17:07:56 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 12 ms / 2,000 ms |
コード長 | 1,091 bytes |
コンパイル時間 | 2,077 ms |
コンパイル使用メモリ | 197,312 KB |
最終ジャッジ日時 | 2025-02-26 09:40:59 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 |
ソースコード
#include <bits/stdc++.h> #define INF 4611686018427387903ll using namespace std; using ll = long long; vector<pair<ll, int> > prime_factorize(ll n){ vector<pair<ll, int> > ret = {}; ll f = 2; while(f * f <= n){ if(n % f == 0){ n /= f; int cnt = 1; while(n % f == 0){ n /= f; ++cnt; } ret.push_back({f, cnt}); } ++f; } if(n != 1){ ret.push_back({n, 1}); } return ret; } ll legendre(ll N, ll K, ll p, int c){ ll ret = 0; ll R = N - K; while(N){ N /= p; ret += N; } while(K){ K /= p; ret -= K; } while(R){ R /= p; ret -= R; } return ret / c; } int main(){ ll N, K, M; cin >> N >> K >> M; vector<pair<ll, int> > primes = prime_factorize(M); ll ans = INF; for(auto&[p, c] : primes){ ll x = legendre(N, K, p, c); if(ans <= x){ continue; } ans = x; } cout << ans << endl; return 0; }