#include #include using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 int main(){ long long N,K,M; cin>>N>>K>>M; map mp; for(long long i=1;i<=1000000;i++){ long long temp = N; long long x = 1LL; for(int j=0;true;j++){ temp /= i + K * j; if(temp<=0)break; x *= i + K * j; if(j>=2)mp[x] ++; } } long long cnt = 0LL; for(auto &a:mp){ long long tt = a.first; long long ok = 0LL,ng = 1000000001; while(ng-ok>1){ long long mid = (ok+ng)/2; long long t = N; t /= mid; t /= mid+K; if(t<=0){ ng = mid; continue; } if(mid * (mid+K)<=tt)ok = mid; else ng = mid; } if(ok * (ok+K) == tt){ a.second++; cnt++; } } long long ans = 0LL; if(M>=2){ for(auto a:mp){ if(a.second==M)ans++; } } else{ long long ok = 0LL,ng = 1000000001; while(ng-ok>1){ long long mid = (ok+ng)/2; long long t = N; t /= mid; t /= mid+K; if(t<=0){ ng = mid; continue; } if(mid * (mid+K)<=N)ok = mid; else ng = mid; } ans = ok; ans -= cnt; for(auto a:mp){ if(a.second==1)ans++; } } cout<