poj 2034 Anti-prime Sequences

来源:互联网 发布:网络任务源码 编辑:程序博客网 时间:2024/06/01 08:15

此题题意是给出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;}

其他好像也没什么好说的了~~

0 0