#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() vector sieve(size_t max) { vector IsPrime(100000 + 1, true); vector primes; IsPrime[0] = false; IsPrime[1] = false; for (int i = 2; i * i <= 100000; ++i) if (IsPrime[i]) { primes.push_back(i); for (int j = 2; i * j <= 100000; ++j) IsPrime[i * j] = false; } return primes; } ll countFactors(vector

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

counts; int x = N; for (auto p : primes) { ll count = 0; while (x % p == 0) { count++; x /= p; } //K乗 if(count > 0) counts.emplace_back(p, count * K); } cout << countFactors(counts, 1, 0, M) << endl; return 0; }