提交时间:2024-07-19 12:32:08
运行 ID: 30372
#include <bits/stdc++.h> using namespace std; #define int long long #define endl "\n" int x,k,m; vector<int>D,d[2000300]; map<int,int>ID; int w[2000300]; bool vis[2000300]; int cnt=0; inline void bd2(int id){ int x=w[id]; vector<int>A; int ct=0; for(int i=1;i<=cnt&&w[i]*w[i]<=x;i++) if(x%w[i]==0){ ct++; if(x/w[i]!=w[i])ct++; } int p=0; d[id].resize(ct); for(int i=1;i<=cnt&&w[i]*w[i]<=x;i++) if(x%w[i]==0){ d[id][p++]=i; if(x/w[i]!=w[i])d[id][--ct]=ID[x/w[i]]; } } inline void bd1 (int x){ int p=0; for(int i=1;i*i<=x;i++) if(x%i==0){ p++; if(i*i!=x)p++; } int s=p; for(int i=1;i*i<=x;i++) if(x%i==0){ ID[i]=++cnt; w[cnt]=i; if(i*i!=x)ID[x/i]=p--,w[p+1]=x/i; } cnt=s; } inline int src(int x,int k){ // cout<<x<<" "<<k<<endl; if(!m)return 0; if(!k||x==1){m--;return w[x];} if(!vis[x])bd2(x); vis[x]=1; int res=0; for(int y:d[x]){ res+=src(y,k-1); if(!m)break; } return res; } signed main(){ ios::sync_with_stdio(0); freopen("trans.in","r",stdin); freopen("trans.out","w",stdout); cin>>x>>k>>m; if(x==1) cout<<1<<endl; else if(k>=m)cout<<m<<endl; else{ bd1(x); cout<<src(ID[x],k)<<endl; } cout.flush(); return 0; }