#include<stdio.h>
#include<math.h>
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("%d\n",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;
}
P7200
最新推荐文章于 2024-07-09 12:01:04 发布