首先考虑无解的情况: n / 2 > k 或者 n==1 且 k != 0 (因为两个数的最大公约数最小为1)
然后因为有 n / 2 组(把 a[i] 和 a[i+1] 看成一组), 所以我可以试 a[1] 和 a[2]的最大公约数为 k - n / 2 + 1, 这样后面的每个组只需要为1,就可以满足条件,
所以前面两个数可以为: k - n / 2 + 1 和 2 * (k - n / 2 + 1), 这样他们的最大公约数就是 k - n / 2 + 1
附上代码:
1 n, k = map(int, raw_input().split()) 2 if n / 2 > k or (n == 1 and k != 0): 3 print -1 4 elif n / 2 == k: 5 for i in xrange(n): 6 print i + 1, 7 else: 8 tmp = k - n / 2 + 1 9 print tmp, tmp << 1, 10 tmp *= 2; 11 for i in xrange(n-2): 12 print tmp + i + 1,