結果
問題 | No.1809 Divide NCK |
ユーザー |
![]() |
提出日時 | 2024-11-30 17:10:42 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 13 ms / 2,000 ms |
コード長 | 1,086 bytes |
コンパイル時間 | 1,980 ms |
コンパイル使用メモリ | 197,452 KB |
最終ジャッジ日時 | 2025-02-26 09:41:07 |
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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 kummer(ll N, ll K, ll p, int q) { ll R = N - K; ll c = 0; ll cnt = 0; while (R or K) { ll a = R % p; ll b = K % p; if (a + b + c >= p) { cnt++; c = (a + b + c) / p; } else { c = 0; } R /= p; K /= p; } return cnt / q; } 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 = kummer(N, K, p, c); if(ans <= x){ continue; } ans = x; } cout << ans << endl; return 0; }