#include "bits/stdc++.h" using namespace std; #define mod 1000000007 #define dom 998244353 #define all(c) begin(c),end(c) #define rep(i,n) repi(i,0,n) #define repi(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) template bool chmax(T &a, const T &b) { if (a < b) { a = b; return true; } return false; } template bool chmin(T &a, const T &b) { if (b < a) { a = b; return true; } return false; } #define long long long #define List vector #define var auto #define Count size() #define Length size() int dd[] = { 0, 1, 0, -1, 0 }; //→↓←↑ using pi = pair; long N, K, M; vector P; int ans = 0; void dfs(int i, long now) { if (i == P.size() - 1) { for (int j = 0; j <= P[i].second; j++) { ans++; now *= P[i].first; if (now > M)break; } //cout << now << " " << ans << endl; return; } for (int j = 0; j <= P[i].second; j++) { dfs(i + 1, now); now *= P[i].first; if (now > M)break; } } void solve() { cin >> N >> K >> M; long W = N; if (N == 1) { cout << 1 << endl; return; } map G; for (long i = 2; i * i <= W; i++) { while (W % i == 0) { G[i]++; W /= i; } } if (W != 1) { G[W]++; } for (auto v : G) { int cnt = 0; long mul = v.first; long now = 1; while (true) { now *= mul; if (now > M) { break; } cnt++; } G[v.first] = min((long)cnt, v.second * K); P.emplace_back(pi(v.first, G[v.first])); } //for (auto v : P) //{ // cout << v.first << " " << v.second << endl; //} dfs(0, 1); cout << ans << endl; } int main() { cin.tie(0); ios::sync_with_stdio(false); solve(); return 0; }