#include using namespace std; #define int long long #define REP(i,m,n) for(int i=(m);i<(n);i++) #define rep(i,n) REP(i,0,n) #define pb push_back #define all(a) a.begin(),a.end() #define rall(c) (c).rbegin(),(c).rend() #define mp make_pair #define endl '\n' //#define vec vector //#define mat vector > #define fi first #define se second #define double long double typedef long long ll; typedef unsigned long long ull; typedef pair pll; //typedef long double ld; typedef complex Complex; const ll INF=1e9+7; const ll MOD=998244353; const ll inf=INF*INF; const ll mod=MOD; const ll MAX=100010; const double PI=acos(-1.0); typedef vector > mat; typedef vector vec; void solve(){ ll x=0; ll n,k,m; cin>>n>>k>>m; vectorp(0); ll z=m; for(int i=2;i*i<=m;i++){ if(z%i)continue; ll cnt=0; while(z%i==0){ z/=i; cnt++; } p.pb(mp(i,cnt)); } if(z>1)p.pb(mp(z,1)); ll y=p.size(); vectorq(y); ll mi=inf; rep(i,y){ ll cop=n; while(cop){ q[i]+=cop/p[i].fi; cop/=p[i].fi; } cop=n-k; while(cop){ q[i]-=cop/p[i].fi; cop/=p[i].fi; } cop=k; while(cop){ q[i]-=cop/p[i].fi; cop/=p[i].fi; } mi=min(mi,q[i]/p[i].se); } cout<