Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #pragma GCC optimize("O3")
- using namespace std;
- int n, k, i, r;
- vector<int> ft, t;
- bool bs(int64_t a, int64_t b){
- long long res = 1;
- for(;b;b>>=1){
- res*=(b&1)*a;
- if(res>n||a>n) return true;
- a*=a;
- }
- return false;
- }
- void f(int64_t x, int i, int cnt, vector<vector<bool>> &dd){
- if(cnt==k){ ++r; return;}
- for(int j = i+1; j < ft.size(); ++j){
- if(i==-1||__gcd(ft[i],ft[j])==1&&x*ft[j]<=int64_t(n)) f(x*ft[j],j,cnt+1,dd);
- if(dd[k-cnt][j]||ft[j]*x>n) break;
- }
- }
- int main(){
- cin >> n >> k;
- for(i = 1; i*i < n; ++i){
- if(n%i) continue;
- ft.push_back(i);
- t.push_back(n/i);
- }
- if(i*i==n) ft.push_back(i);
- ft.insert(ft.end(),t.rbegin(),t.rend());
- vector<vector<bool>> dd(k+1,vector<bool>(ft.size()));
- for(int i = 1; i <= k; ++i)
- for(int j = 0; j < ft.size(); ++j)
- dd[i][j] = bs(ft[j],i);
- f(1,-1,0,dd);
- cout << r;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement