您的位置:首页 > 产品设计 > UI/UE

poj 2034 Anti-prime Sequences

2016-09-21 22:21 344 查看
此题题意是给出m,n,k;

意思是在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;
}


其他好像也没什么好说的了~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: