提交时间:2025-10-29 20:06:08
运行 ID: 38821
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=5e5+20,LM=N-10; vector<int> d[N]; void init(){ for(int i=1;i<=LM;i++){ for(int j=i;j<=LM;j+=i){ d[j].push_back(i); } } } ll n,k,m; int cnt=0;ll sum=0; vector<ll> dv; void dfs(ll u,int c){ if(u==1){cnt++;sum+=u;return ;} if(c==k){cnt++,sum+=u;return ;} if(u<LM){ for(auto ed:d[u]){ dfs(ed,c+1); if(cnt>=m) return ; } }else{ for(auto ed:dv){ if(u%ed!=0) continue; dfs(ed,c+1);if(cnt>=m) return ; } } } int main(){ //freopen("trans.in","r",stdin); //freopen("trans.out","w",stdout); init(); cin>>n>>k>>m; if(k>m){cout<<m<<endl;return 0;} vector<ll> dv1,dv2; for(int i=1;1ll*i*i<=n;i++){ if(n%i==0){ dv1.push_back(i); if(1ll*i*i!=n) dv2.push_back(n/i); } }reverse(dv2.begin(),dv2.end()); for(auto ed:dv1)dv.push_back(ed); for(auto ed:dv2)dv.push_back(ed); dfs(n,0);cout<<sum<<endl; return 0; }