1 条题解
-
0
自动搬运
来自洛谷,原作者为

ikunTLE
互关条件见主页(luogu.me/paste/1ij66blw),关注我可以获得我小号 OIerDb 的关注(需私信) || 最后在线时间:2025年8月24日22时12分搬运于
2025-08-24 22:13:32,当前版本为作者最后更新于2024-06-11 21:33:57,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路
本题是一道搜索。
分析过样例后,你会发现从上一次搜下来的数,一直到 中,所有 的质因子都接着往下搜,每一个新的质因子就是一个答案。既然那个数是 的质因数了,答案就是计数器 (这里的 是更新后每一次的 )。
经过排序后就是我们要的答案。
AC CODE
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int n,ans[N],num; map<int,bool>mp; void dfs(int p,int x,int cnt){ if(x<=p){//没超出答案范围 int temp=cnt+p-1; if(!mp[temp]){//去重 ans[++num]=temp; mp[temp]=true; } } int sqrt_p=sqrt(p); for(int i=x;i<=sqrt_p;++i) if(!(p%i))//是p(n÷i)的质因子 dfs(p/i,i,cnt+i-1);//接着搜 return; } int main(){ scanf("%d",&n); dfs(n,2,0);//2是最小的质数,故从2开始 printf("%d\n",num); sort(ans+1,ans+num+1);//排序 for(int i=1;i<=num;++i) printf("%d ",ans[i]); return 0; }
- 1
信息
- ID
- 5068
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者