| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38806 | 23级徐泽厚 | 【S】T1 | C++ | 运行出错 | 0 | 1 MS | 2608 KB | 3932 | 2025-10-29 15:44:47 |
#include <bits/stdc++.h> #define int long long using namespace std; int x,k,m; vector<int> a; vector<int> as[100005]; int used[100005]; vector<vector<int>> p; map<int,int> mp; int yjg=0; int las=0; void sch(int n){ vector<int> jr; for (int i=1;i*i<=n;i++){ if (n%i==0){ jr.push_back(i); jr.push_back(n/i); if (i==(n/i)){ jr.pop_back(); } } } sort(jr.begin(),jr.end()); as[n]=jr; used[n]=1; return ; } vector<int> sch2(int n){ vector<int> jr; for (int i=1;i*i<=n;i++){ if (n%i==0){ jr.push_back(i); jr.push_back(n/i); if (i==(n/i)){ jr.pop_back(); } if (jr.size()>m) jr.pop_back(); if (jr.size()==m){ sort(jr.begin(),jr.end()); return jr; } } } sort(jr.begin(),jr.end()); return jr; } void slv(){ a.push_back(x); while (k--){ vector<int> nt; int lsize=0; for (int sss=0;sss<a.size();sss++){ int v=a[sss]; if (v<=100000){ if (used[v]){ for (int ind=0;ind<as[v].size();ind++){ nt.push_back(as[v][ind]); // lsize++; lsize=nt.size(); if (lsize==m) ind=as[v].size(); } if (lsize==m) sss=a.size(); } else{ sch(v); for (int ind=0;ind<as[v].size();ind++){ nt.push_back(as[v][ind]); // lsize++; lsize=nt.size(); if (lsize==m) ind=as[v].size(); } if (lsize==m) sss=a.size(); } } else{ vector<int> ls=sch2(v); for (int ind=0;ind<ls.size();ind++){ nt.push_back(ls[ind]); lsize=nt.size(); if (lsize==m) ind=ls.size(); } } } a=nt; } int sum=0; int lth; if (a.size()<m){ lth=a.size(); } else{ lth=m; } for (int i=0;i<lth;i++){ sum+=a[i]; // printf("%lld ",a[i]); } printf("%lld\n",sum); } void pre(){ for (int i=1;i*i<=x;i++){ if (x%i!=0) continue; a.push_back(i); a.push_back(x/i); if (i==x/i){ a.pop_back(); } } sort(a.begin(),a.end()); // for (int i=0;i<a.size();i++){ // mp[a[i]]=i; // } // vector<int> sss; // sss.push_back(1); // p.push_back(sss); // for (int i=0;i<a.size();i++){ // int u=a[i]; // if (u==1){ // continue; // } // vector<int> ls; // for (int j=0;j<i;j++){ // if (a[i]%a[j]==0){ // ls.push_back(a[j]); // } // } // p.push_back(ls); // } return ; } void dfs(int cs,int nm){ if (m<=0){ return ; } if (cs==0 or nm==1){ m--; yjg+=nm; return ; } for (auto t:a){ if (m<=0 or nm<t){ break; } if (nm%t==0){ dfs(cs-1,t); } } } signed main(){ freopen("test.in","r",stdin); freopen("test.out","w",stdout); scanf("%lld%lld%lld",&x,&k,&m); if (k>=m){ printf("%lld\n",m); exit(0); //+10pts } if (k<=5 or m<=500){ slv(); exit(0); //70pts } pre(); dfs(k,x); cout<<yjg<<"\n"; return 0; }