#include<iostream>
using namespace std;
int list[1010]={0,1,2,3};
int Find(int N) //小于N的素数的个数
{
int i;
for(i=1;i<=1000;i++)
if(N<list[i])
{
i--;
break;
}
return i; //当结果为1000以内的最大值时,需要大于1000的素数与N进行比较,而
//主函数内第二行循环中的上限为1000显然不能求得大于1000的素数
//所以上限改为1100 ,AC
}
bool Isprime(int n) //素数判断
{
int i = 0;
for(i = 2; i < n; i++)
if(n % i == 0)
return false;
return true;
}
int main()
{
int i,j,k,N,C,c,center,begin;
for(k=i=4;i<=1100;i++) //1100改为1000会错
if( Isprime(i) )
list[ k++ ] = i ;
while( scanf("%d%d",&N,&C)!=EOF )
{
int F = Find(N); //素数的个数
center = F/2; //中心
if( F%2==0 )
{
c = 2 * C ; //c为需要输出的个数
begin = center-C+1;
}
else
{
c=2*C-1;
begin=center-(C-1)+1;
}
//printf("F=%d c=%d center=%d begin=%d\n",F,c,center,begin);
printf("%d %d:",N,C);
if(F<c)
for(i=1;i<=F;i++)
printf(" %d",list[i]);
else
for(i=begin,j=1;j<=c;j++,i++)
printf(" %d",list[i]);
printf("\n\n");
}
return 0;
}