Untitled
unknown
plain_text
a year ago
1.1 kB
12
Indexable
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const int MOD = 1e9 + 7;
vector<pair<long long, long long>> findPairs(long long M) {
vector<pair<long long, long long>> pairs;
for (long long x = 1; x <= sqrt(M); ++x) {
if (M % x == 0) {
long long y = M / x;
pairs.push_back({x, y});
if (x != y) {
pairs.push_back({y, x});
}
}
}
return pairs;
}
int main() {
long long N, M;
int K;
cin >> N >> M >> K;
K = min(M, 50LL); // Ensure K is at most 50
vector<pair<long long, long long>> pairs = findPairs(M);
vector<vector<long long>> dp(N + 1, vector<long long>(K + 1, 0));
dp[0][0] = 1;
for (long long i = 1; i < N; ++i) {
for (int j = 0; j <= K; ++j) {
for (auto &p : pairs) {
if (j > 0) {
dp[i][j] = (dp[i][j] + dp[i-1][j-1]) % MOD;
}
dp[i][j] = (dp[i][j] + dp[i-1][j]) % MOD;
}
}
}
cout << dp[N-1][K] << endl;
return 0;
}
Editor is loading...
Leave a Comment