結果
問題 | No.1809 Divide NCK |
ユーザー | 沙耶花 |
提出日時 | 2022-01-14 21:30:43 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 12 ms / 2,000 ms |
コード長 | 711 bytes |
コンパイル時間 | 4,195 ms |
コンパイル使用メモリ | 256,388 KB |
最終ジャッジ日時 | 2025-01-27 11:01:47 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include <atcoder/all> using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for(int i=0;i<(n);i++) #define Inf 1000000001 long long get(long long n,long long k){ long long ret = 0; while(n!=0){ ret += n/k; n/=k; } return ret; } int main(){ long long N,K,M; cin>>N>>K>>M; map<long long,int> mp; for(long long i=2;i*i<=M;i++){ while(M%i==0){ mp[i]++; M/=i; } } if(M!=1)mp[M]++; long long ans = 8000000000000000000; for(auto a:mp){ long long cur = 0; cur += get(N,a.first); cur -= get(K,a.first); cur -= get(N-K,a.first); ans = min(ans,cur/a.second); } cout<<ans<<endl; return 0; }