BZOJ 3629: [JLOI2014]聪明的燕姿
2017-09-03 20:50
429 查看
解题报告
题目范围应该是2*10e9,总之我数组开200是爆了一发TAT,还有数据组数什么的其实并没有输入…又贡献了一发WA
题目范围应该是2*10e9,总之我数组开200是爆了一发TAT,还有数据组数什么的其实并没有输入…又贡献了一发WA
#include<cstdio> #include<algorithm> #define N 50005 using namespace std; int t,S,cnt; int mark ,prime ,ans ; void init(int n) { for(int i=2;i<=n;++i) { if(!mark[i]) prime[++cnt]=i,mark[i]=1; for(int j=1;j<=cnt&&prime[j]*i<=n;++j) { mark[prime[j]*i]=1; if(i%prime[j]==0) break; } } } int check(int x) { if(x==1) return 0; for(int i=1;prime[i]*prime[i]<=x;++i) if(x%prime[i]==0) return 0; return 1; } void dfs(int num,int pre,int now) { if(num==1) {ans[++ans[0]]=now;return;} if(num-1>prime[pre]&&check(num-1)) ans[++ans[0]]=now*(num-1); for(int i=pre+1;prime[i]*prime[i]<=num;++i) { int p=prime[i],sum=p+1; while(sum<=num) { if(num%sum==0) dfs(num/sum,i,now*p); p*=prime[i]; sum+=p; } } } int main() { init(50000); // scanf("%d",&t); // while(t--) while(scanf("%d",&S)!=EOF) { ans[0]=0; dfs(S,0,1); printf("%d\n",ans[0]); sort(ans+1,ans+ans[0]+1); for(int i=1;i<=ans[0];++i) { printf("%d",ans[i]); if(i==ans[0]) printf("\n"); else printf(" "); } } }
相关文章推荐
- bzoj3629[JLOI2014]聪明的燕姿
- BZOJ3629 [JLOI2014]聪明的燕姿
- bzoj 3629: [JLOI2014]聪明的燕姿
- BZOJ_3629_[JLOI2014]聪明的燕姿_dfs
- [BZOJ 3629][ JLOI2014 ]聪明的燕姿
- 【数论+搜索】BZOJ3629 [JLOI2014]聪明的燕姿
- 【BZOJ3629】【JLOI2014】聪明的燕姿 dfs 素数筛
- bzoj 3629 [JLOI2014]聪明的燕姿(约数和,搜索)
- BZOJ 3629 [JLOI 2014]聪明的燕姿 简单数论
- bzoj 3629: [JLOI2014]聪明的燕姿【线性筛+dfs】
- bzoj3629[JLOI2014]聪明的燕姿 搜索+筛法
- 【BZOJ3629】[JLOI2014]聪明的燕姿 数学+搜索
- bzoj 3629: [JLOI2014]聪明的燕姿
- BZOJ3629 [JLOI2014]聪明的燕姿
- [bzoj3629][JLOI2014]聪明的燕姿(数论+dfs)
- BZOJ 3629 [JLOI2014] 聪明的燕姿 dfs
- [暴力搜索 剪枝 约数和反函数] BZOJ 3629 [JLOI2014]聪明的燕姿
- bzoj3629 [JLOI2014]聪明的燕姿(数论+dfs)
- Bzoj3629--Jloi2014聪明的燕姿
- bzoj3629: [JLOI2014]聪明的燕姿 搜索好题