#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int LL; typedef pair P; typedef pair LP; const LL INF=1LL<<60; const LL MAX=1e9+7; void array_show(int *array,int array_n,char middle=' '){ for(int i=0;i &vec_s,int vec_n=-1,char middle=' '){ if(vec_n==-1)vec_n=vec_s.size(); for(int i=0;i &vec_s,int vec_n=-1,char middle=' '){ if(vec_n==-1)vec_n=vec_s.size(); for(int i=0;i ostream& operator<<(ostream& os,const vector& v1){ int n=v1.size(); for(int i=0;i ostream& operator<<(ostream& os,const pair& p){ os< istream& operator>>(istream& is,vector& v1){ int n=v1.size(); for(int i=0;i>v1[i]; return is; } template istream& operator>>(istream& is,pair& p){ is>>p.first>>p.second; return is; } namespace sol{ void solve(){ LL n,m; LL i,j,k; LL a,b,c; cin>>n>>k>>m; vector v1; a=m; for(i=2;i<=1e6;i++){ for(j=0;a%i==0;j++)a/=i; if(j)v1.push_back({i,j}); } if(a>1)v1.push_back({a,1}); auto calc=[](LL x,LL y)->LL{ LL p=y; LL ss=0; for(;p<=x;p*=y){ ss+=x/p; if(INF/p<=y-1)break; } return ss; }; LL s=n; for(auto node:v1){ a=node.first,b=node.second; c=calc(n,a)-calc(n-k,a)-calc(k,a); c=max(c,0LL); s=min(s,c/b); } cout<