#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair P; const ll MOD = 1000000007; #define rep(i,n) for(int i=0;i=0;i--) #define all(x) (x).begin(),(x).end() int N, K, M; map primeNumberFactor(int n) { map res; for (int i = 2; i * i <= n; i++) { while (n % i == 0) { ++res[i]; n /= i; } } if (n != 1) res[n] = 1; return res; } ll countFactors(vector

list, ll num, int idx) { //リストを最後まで巡回してもubを越えなかった if (idx >= list.size()) return 1; auto x = list[idx]; ll count = 0; reple(i, 0, x.second) { //numは単調増加するため、一度でもubを超えたら終了 if (num > M) break; //次の素因数へ再帰 count += countFactors(list, num, idx + 1); num *= x.first; } return count; } int main() { cin >> N >> K >> M; auto primes = primeNumberFactor(N); vector

counts; for (auto p : primes) { counts.emplace_back(p.first, p.second * K); } cout << countFactors(counts, 1, 0) << endl; return 0; }