poj 2034 Anti-prime Sequences
2016-09-21 22:21
344 查看
此题题意是给出m,n,k;
意思是在m~n的区间里任意连续的k个数必须为合数(注意:任意连续个大于2小于k的数都要满足为合数)
解题方法:dfs暴搜;
直接上代码:
其他好像也没什么好说的了~~
意思是在m~n的区间里任意连续的k个数必须为合数(注意:任意连续个大于2小于k的数都要满足为合数)
解题方法:dfs暴搜;
直接上代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int k,a[1010],b[1010]; bool p[505110]; int pd(int a,int c){ if(a<2)return 1; int sum=c; for(int i=a-1;i>=1&&i>a-k;i--){//从后往前判断; sum+=b[i]; if(!p[sum])return 0; } return 1; } bool flag; void dfs(int x,int y,int t){ if(flag==1)return; if(t>y-x+1){ for(int kk=1;kk<t-1;kk++)printf("%d,",b[kk]); printf("%d\n",b[t-1]); flag=1; return; } for(int i=x;i<=y;i++){ if(!a[i]&&pd(t,i)){ b[t]=i; a[i]=1; dfs(x,y,t+1); a[i]=0; } if(flag==1)return;//记得要及时return; } } int main(){ int i,j,m,n,j1; j1=750; p[1]=1; for(i=2;i<=j1;i++)//筛出素数 if(!p[i]) for(j=i*i;j<=505100;j+=i){ p[j]=1; } while(1){ flag=0; memset(a,0,sizeof(a)); scanf("%d%d%d",&m,&n,&k); if(m==0&&n==0&&k==0)break; dfs(m,n,1); if(flag==0)printf("No anti-prime sequence exists.\n"); } return 0; }
其他好像也没什么好说的了~~
相关文章推荐
- POJ-2034-Anti-prime Sequences
- POJ 2034 Anti-prime Sequences(素数预处理+DFS回溯)
- POJ 2034 Anti-prime Sequences(数论+dfs)
- poj 2034 Anti-prime Sequences(dfs)
- poj 2034 Anti-prime Sequences
- poj 2034 Anti-prime Sequences
- 递归和回溯 POJ 2034 Anti-prime Sequences
- poj 2034 Anti-prime Sequences
- poj 2034 Anti-prime Sequences(dfs)
- POJ - 2034 Anti-prime Sequences(素数判断+搜索)
- poj 2034 Anti-prime Sequences(dfs)
- POJ 2034 Anti-prime Sequences (筛素数+DFS)
- poj 2034 Anti-prime Sequences
- POJ 2034 Anti-prime Sequences (筛素数+DFS)
- poj 2034 Anti-prime Sequences(dfs)
- POJ 2034 Anti-prime Sequences
- POJ 2034 Anti-prime Sequences
- [暑假集训--数论]poj2034 Anti-prime Sequences
- POJ 2034 Anti-prime Sequences
- poj 2034 Anti-prime Sequences(dfs)