| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38820 | LYLAKIOIAKIOI | 【S】T1 | C++ | 运行超时 | 80 | 1000 MS | 56128 KB | 1036 | 2025-10-29 20:01:52 |
#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; void dfs(ll u,int c){ if(c==k){cnt++,sum+=u;return ;} if(u<LM){ for(auto ed:d[u]){ dfs(ed,c+1); if(cnt>=m) return ; } }else{ vector<ll> dv1,dv2; for(int i=1;1ll*i*i<=u;i++){ if(u%i==0){ dv1.push_back(i); if(1ll*i*i!=u) dv2.push_back(u/i); } }reverse(dv2.begin(),dv2.end()); for(auto ed:dv1){dfs(ed,c+1);if(cnt>=m) return ;} for(auto ed:dv2){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;} dfs(n,0);cout<<sum<<endl; return 0; }