#include#include long long A,B; int flag=0;//标志是否找到解决方案 long long a[30]={0};//用于存储解决方案 void search(long long left,long long right,int depth); int Isprime(long long x); int main() { scanf("%lld%lld",&A,&B); a[0]=A; search(A,B,1); if(!flag) printf("-1"); } void search(long long left,long long right,int depth) { if(depth==30) return; if(flag) return ; if(Isprime(fabs(left-right))) { int i; for(i=0;a[i]!=0;i++) { } printf("%dn",i+1); for(i=0;a[i]!=0;i++) printf("%lld ",a[i]); printf("%lld",B); //打印数组a flag=1; return ; } if(left!=2) { if(Isprime(left-2)) { a[depth]=2; search(2,right,depth+1); } if(Isprime(left-2)) { a[depth]=left-2; search(left-2,right,depth+1); } if(Isprime(left+2)) { a[depth]=left+2; search(left+2,right,depth+1); } } else { if(Isprime(right+2))//注意!!!这里是关键! //这儿之所以直接就y+2,第一点,y-2已经判断过 //第二点,2 ... y的结构,只可能有3个数, //因为不可能有3个连续的奇素数 { a[depth]=right+2; search(right+2,right,depth+1); } } } int Isprime(long long x) { if(x<=1) return 0; if(x==2) return 1; long long i; for(i=2;i*i<=x;i++) { if(x%i==0) return 0; } return 1; }



