题目大意:给出两个整数n和k,找出n个不同的数。如果n为偶数,gcd(a1,a2)+gcd(a3,a4)+……+gcd(an-1,an)=k;如果n为奇数,
gcd(a1,a2)+gcd(a3,a4)+……+gcd(an-2,an-1)=k。
比赛的时候一直在看其他的题,没看这道题,其实这题也很简单的。
分析:因为每两个数得出一个数,设a=n/2,
如果a>k,即每两个数的最大公约数都为1时都不能满足题意,输出-1;如果k=0,且n>=2时,同样输出-1。
如果a=k,那么只要使每一组的最大公约数为1即可。
如果a<k,令a-1组的最大公约数为1,第一组的最大公约数为k-a+1即可。
#include<stdio.h>
int main()
{
int n, k, i, j;
while(~scanf("%d%d",&n,&k))
{
int a = n / 2;
if(a > k || (a == 0 && k != 0))
printf("-1\n");
else if(a == k)
{
for(i = 1; i <= n; i++)
{
if(i > 1) printf(" ");
printf("%d", i);
}
printf("\n");
}
else
{
int tmp = k - a + 1;
printf("%d %d", tmp, tmp*2);
for(i = tmp * 2 + 1, j = 1; j < a; i += 2, j++)
printf(" %d %d",i, i+1);
if(n % 2 == 1)
printf(" %d", i);
printf("\n");
}
}
return 0;
}