9475.请输入文本

Time Limit: 1s Memory Limit: 64MB

小远和小涛在玩一个游戏,游戏规则是这样的:

1.首先,他们把$n$个相同的球分成$m$堆,第$i$堆小球数量为$a_i$。

2.接着,每轮他们会从每堆中取出一个球,并将这些取出的球组成一个新的堆。

例如:初始有4个小球,分成3堆,每堆球数分别为1, 1, 2,第一轮从每堆中取出一个球,得到3个球,将它们组成一个新的堆,此时局面为0, 0, 1, 3,移除0堆,局面为1, 3,同理,第二轮后局面为2, 2,第三轮后局面为1, 1, 2,……

众所周知这个游戏是可以无限进行下去的。且经过几轮游戏,他们的局面可能陷入循环。循环中的局面个数称为循环长度(局面是否重复只和小球堆数和每堆球数有关,与顺序无关),比如刚刚的例子循环长度为3。

小远向小涛提出一个问题:

给定小球个数n和循环长度k,问是否存在一个初始局面,使得游戏陷入长度为k的循环?(如果多个答案,求出堆数m最小的那个,如仍有多个答案,求出字典序最小的那个)。小远和小涛急着去跑阳光长跑了,于是他们决定请你来解决这个问题。

Input Format(From the terminal/stdin)

第一行一个正整数t ( $1\leq t\leq 50$ ) ,表示测试数据的组数。接下来每行两个正整数n ( $1\leq n\leq 10^6$ ) 和k ( $1\leq k\leq 10^9$ ) ,表示球的数量和循环长度。

Output Format(To the terminal/stdout)

对于每组数据,输出一行,如果存在这样的初始局面,输出这个初始局面各堆球数,每个数字间用空格隔开;否则输出一个$-1$。

Sample Input

Copy
3
1 1
2 1
3 1 \n
 · \n
 · \n
 · \n

Sample Output

Copy
1
-1
3 \n
  \n
 \n
Source: 2025“钉耙编程”中国大学生算法设计暑期联赛(1), HDU, 7990

Submit

请先 登录

© 2025 FAQs