2017.9.11 聪明的燕姿 失败总结
2017-09-11 10:27
211 查看
这题有毒、如假包换的爆搜
只要知道一个数的约数加起来=分解质因数后每个 质因数1~pi次前缀和 相乘的结果 就好 做(sou)了
所以如果知道约数和,就可以枚举质因数来爆搜
必须剪枝到极致才能过,不然会T
由于约数和==一堆数的乘积,所以有一个剪枝是只有能整除才去搜
由于分解的质因数不能重,所以递归剩下部分时不能用上一次用的质因数。(去重优化)
由于有可能出现剩下的大于根n,所以及时判断 剩下的数-1 是不是质数 (第一遍写的时候以为剩下的数-1只有一个、、结果狂wa)
然后就可以过了
码:
只要知道一个数的约数加起来=分解质因数后每个 质因数1~pi次前缀和 相乘的结果 就好 做(sou)了
所以如果知道约数和,就可以枚举质因数来爆搜
必须剪枝到极致才能过,不然会T
由于约数和==一堆数的乘积,所以有一个剪枝是只有能整除才去搜
由于分解的质因数不能重,所以递归剩下部分时不能用上一次用的质因数。(去重优化)
由于有可能出现剩下的大于根n,所以及时判断 剩下的数-1 是不是质数 (第一遍写的时候以为剩下的数-1只有一个、、结果狂wa)
然后就可以过了
码:
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ll long long int N,su[1000006],tot,n,ans,daan[1000006]; bool he[1000006]; void eular() { int i,j; for(i=2;i<=N;i++) { if(!he[i]) { su[++tot]=i; } for(j=1;j<=tot&&i*su[j]<=N;j++) { he[i*su[j]]=1; if(i%su[j]==0)break; } } } void dfs(int qi,int o,int ys) { int i;ll he,lin; if(ys==1) { daan[++ans]=o; } if(ys-1>=su[qi]) { bool ss=1; for(i=1;su[i]*su[i]<=ys-1&&i<=tot;i++) { if((ys-1)%su[i]==0)ss=0; } if(ss)daan[++ans]=o*(ys-1); } for (i=qi; su[i]*su[i]<=ys; i++) for (ll he=1+su[i],lin=su[i]; he<=ys; lin*=(ll)su[i],he+=lin) if (!(ys%he)) dfs(i+1,o*lin,ys/he); } int main() { N=sqrt(3000000009); eular(); int i; while(~scanf("%d",&n)) { ans=0; dfs(1,1,n); if(ans==0) { printf("0\n"); continue; } printf("%d\n",ans); sort(daan+1,daan+1+ans); for(i=1;i<ans;i++) printf("%d ",daan[i]); printf("%d\n",daan[ans]); // printf("\n"); } }
相关文章推荐
- 2017.9.11 数列 失败总结
- bzoj3629[JLOI2014]聪明的燕姿
- 我的2014年总结 - 一些失败的面试经历
- 创业一年半的失败总结,什么样的团队能够创业成功
- SQL sever 2000 重新安装失败问题总结
- 竞赛失败的总结
- 淘宝面试失败总结
- thoughtworks面试失败总结
- 为了一个失败的项目,好久没来这里了,晚上写个项目总结,好让大家也有个借鉴!!!
- 2017.9.22 middle 失败总结
- 微信公众号支付支付验证签名失败及公众号支付总结
- Lync2013 升级错误总结4 创建聊天室失败 提示:服务器无法处理您的请求,请稍候再试
- 2017.3.30 时态同步 失败总结
- 010006 一个失败的项目总结
- cj搜索算法-魔版(打表术失败总结)
- 失败中总结经验
- openstack---失败总结、、、
- Maven学习总结(38)——Maven下载失败文件夹批量删除问题的两种解决方法
- 个人站长创业失败的原因总结
- 百度一面,失败经验总结