题目描述
小A同学去参加聚会,聚会上提供了n个食物,本着公平公正的原则,所有人都吃了相同个数的食物,最终剩余的食物个数m不够大家均分时,大家均拒绝再吃。那么给定n和m,你能求出参加聚会的可能人数么?
输入
第一行一个数字t(0<t<=1000),代表测试数据的组数。
之后t组测试数据,输入n和m两个数字,其含义如题目所示。
测试数据保证n、m均在[1,100000]范围内。
输出
对于每组测试数据,首先输出参加聚会的人数有几种情况,然后分别输出每种情况下参加聚会的人数,其中人数按从小到大排序且用空格分隔。
如果不可能出现输入数据所示的情况,请输出一个"Impossible"。
每个输出占一行,如样例所示。
样例输入
2
7 4
28 4
样例输出
Impossible
4 6 8 12 24
提示
参加聚会人数可以为1.
对于第二组数据的输出,第一个整数4代表参加聚会人数可能出现几种情况。
#include<stdio.h>
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
int sum=0;
scanf("%d%d",&n,&m);
if((n-m)<=m) printf("Impossible");
else {
for(int i=m+1;i<=n-m;i++)
if((n-m)%i==0) sum=sum+1;
printf("%d",sum);
printf(" ");
for(int j=m+1;j<=n-m;j++)
if((n-m)%j==0) {printf("%d",j);printf(" ");}
}
printf("\n");
}
}