Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<vector>
- #include<iostream>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int n, k;
- int ans = 0;
- void f(int i, int p, int Count, vector<int>& div, vector<vector<bool> >& prime)
- {
- if(Count == 0) ans++;
- else
- {
- for(int j = i + 1; j < div.size(); ++j)
- {
- if(prime[i][j] && p * div[j] <= n)
- {
- f(j, p * div[j], Count - 1, div, prime);
- }
- }
- }
- }
- int gcd(int a, int b)
- {
- if(b == 0) return a;
- else return gcd(b, a % b);
- }
- int main()
- {
- cin >> n >> k;
- vector<int> div;
- int i = 1;
- while(i * i <= n)
- {
- if(n % i == 0)
- {
- div.push_back(i);
- if(i*i != n) div.push_back(n / i);
- }
- ++i;
- }
- sort(div.begin(), div.end());
- vector<vector<bool> > prime(div.size(), vector<bool>(div.size()));
- for(int i = 0; i < div.size(); ++i)
- {
- for(int j = 0; j < div.size(); ++j)
- {
- if(gcd(div[i], div[j]) == 1)
- {
- prime[i][j] = true;
- prime[j][i] = true;
- }
- }
- }
- for(int d = 0; d < div.size(); ++d)
- {
- f(d, div[d], k - 1, div, prime);
- }
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement